正则如何向前匹配一个数据啊
c='''a='内容1'b
a='内容2'b
a='内容3'b
a='内容4'b
a='内容5'b=x
'''
上面这样的字串,我怎么能只匹配到内容5的内容?
b= re.findall('a=\'([\w\W]+)(?=b=x)',c)的结果是
["内容1'b\na='内容2'b\na='内容3'b\na='内容4'b\na='内容5'"],如何能只匹配到最后一个a=后面的内容呢
本帖最后由 hrp 于 2021-1-15 07:56 编辑
import re
c='''
a='内容1'b
a='内容2'b
a='内容3'b
a='内容4'b
a='内容5'b=x
'''
# 前提是你的c本来就是多行的
print(re.findall(r"a='(.+)'b=x", c))
# ['内容5'] 本帖最后由 °蓝鲤歌蓝 于 2021-1-14 23:30 编辑
s = re.search(r"a=\'(.*)\'b=x", c).group(1) result = re.findall(r'a=(.*)', c)[-1]
result = re.findall(r'a=\'(.*)\'', c)[-1] 正则表达式是从左往右匹配的
你这个其实可以匹配到
"内容1'b\na='内容2'b\na='内容3'b\na='内容4'b\na='内容5'"
"内容5'"
这两个
由于正则表达式解释器是个有限状态机 前一个匹配锁死了被检索的状态 后面那个就检索不到
举个例子ababa里面去匹配aba 只能匹配到一个 上面的有人的答案是错的看似结果是对的
因为你有换行正则表达式的 . 是匹配不到换行符的 写的是错的但是得到正确结果了
{:10_292:}不要指望向前匹配 得换个思路匹配
不同模式主要会改变`.`以及`^`和`$`的匹配行为
- `None` 首行模式,默认的。只有第一行都有开头和结尾。换行符不会被匹配。
- `re.S` / `re.DOTALL` 单行模式,整个文本看成一行。换行符会被当作普通字符匹配。
- `re.M` / `re.MULTILINE` 多行模式,每一行都有开头和结尾。换行符不会被匹配。
- `re.I` / `re.IGNORECASE`忽略大小写模式。
多行匹配加re.S模式才是最真实的 上面楼的有的答案加了re.S或者去掉你原字符串的换行后 结果就会错误 import re
c='''
a='内容1'b
a='内容2'b
a='内容3'b
a='内容4'b
a='内容5'b=x
'''
b= re.findall('(?<=x=b)([\w\W]+?)\'=a',c[::-1],re.S)
print(b[::-1])
倒着匹配大法{:10_292:}
hrp 发表于 2021-1-14 22:50
如果是一行的呢,我试过如果不加换行,你这个就匹配和我之前那个一样 kogawananari 发表于 2021-1-15 02:30
倒着匹配大法
你这个完全是从后向前,连匹配出来的都是 kogawananari 发表于 2021-1-15 02:29
不同模式主要会改变`.`以及`^`和`$`的匹配行为
- `None` 首行模式,默认的。只有第一行都有开头和结尾。 ...
假设没有换行符,或者如下的网页代码
<tr>
<td class="td-title faceblue">
<span class="face" title="普通帖">
</span>
<a href="/post-me-221030-1.shtml" target="_blank">
人民币贬值,影响全局<span class="art-ico art-ico-3" title="内有1张图片"></span>
</a>
</td>
<td><atarget="_blank" class="author">乾坤socoly</a></td>
<td>6331</td>
<td>36</td>
<td title="2020-08-06 20:54">08-06 20:54</td>
</tr>
<tr class="bg">
<td class="td-title faceblue">
<span class="face" title="普通帖">
</span>
<a href="/post-develop-2449995-1.shtml" target="_blank">
端午的理财日志
</a>
</td>
<td><atarget="_blank" class="author">66端午88</a></td>
<td>23823</td>
<td>95</td>
<td title="2020-08-06 19:56">08-06 19:56</td>
</tr>
<tr>
<td class="td-title faceblue">
<span class="face" title="普通帖">
</span>
<a href="/post-develop-2445674-1.shtml" target="_blank">
从深圳芯片行业辞职!再到厦门,学做蛋糕<span class="art-ico art-ico-3" title="内有20张图片"></span>
</a>
</td>
<td><atarget="_blank" class="author">奔跑之君</a></td>
<td>121735</td>
<td>923</td>
<td title="2020-08-06 19:51">08-06 19:51</td>
</tr>
</tbody>
<tbody>
<tr class="bg">
<td class="td-title faceblue">
<span class="face" title="普通帖">
</span>
<a href="/post-develop-2447158-1.shtml" target="_blank">
准备回到自己的农村老家去从事农业<span class="art-ico art-ico-3" title="内有4张图片"></span>
</a>
</td>
<td><atarget="_blank" class="author">doutou128</a></td>
<td>86820</td>
<td>772</td>
<td title="2020-08-06 19:51">08-06 19:51</td>
</tr>
<tr>
<td class="td-title faceblue">
<span class="face" title="普通帖">
</span>
<a href="/post-develop-2450095-1.shtml" target="_blank">
民生万象33<span class="art-ico art-ico-3" title="内有4张图片"></span>
</a>
</td>
<td><atarget="_blank" class="author">海天润</a></td>
<td>20167</td>
<td>2</td>
<td title="2020-08-06 19:37">08-06 19:37</td>
</tr>
<tr class="bg">
<td class="td-title faceblue">
<span class="face" title="普通帖">
</span>
<a href="/post-develop-2450125-1.shtml" target="_blank">
买几个煮花生吃,为什么里面都是水呢?是否天下乌鸦一般黑,有不灌水的煮花生么?<span class="art-ico art-ico-3" title="内有3张图片"></span>
</a>
</td>
<td><atarget="_blank" class="author">wifist</a></td>
<td>31263</td>
<td>6</td>
<td title="2020-08-06 19:33">08-06 19:33</td>
</tr>
<tr>
<td class="td-title faceblue">
<span class="face" title="普通帖">
</span>
<a href="/post-develop-2097050-1.shtml" target="_blank">
期市奥秘2:3分钟日内技术精解(图文版)
</a>
</td>
<td><atarget="_blank" class="author">剑鱼2011</a></td>
<td>79205</td>
<td>1967</td>
<td title="2020-08-06 19:08">08-06 19:08</td>
</tr>
<tr class="bg">
<td class="td-title faceblue">
<span class="face" title="精华帖">
</span>
<a href="/post-develop-2446477-1.shtml" target="_blank">
失业了,给中二学生补英语
</a>
</td>
<td><atarget="_blank" class="author">侦查领队</a></td>
<td>22198</td>
<td>82</td>
<td title="2020-08-06 19:07">08-06 19:07</td>
</tr>
<tr>
<td class="td-title faceblue">
<span class="face" title="普通帖">
</span>
<a href="/post-develop-2448659-1.shtml" target="_blank">
同等条件下在国外打工好还是国内?
</a>
</td>
<td><atarget="_blank" class="author">火刑天</a></td>
<td>60193</td>
<td>2524</td>
<td title="2020-08-06 19:05">08-06 19:05</td>
</tr>
<tr class="bg">
<td class="td-title faceblue">
<span class="face" title="普通帖">
</span>
<a href="/post-develop-2450071-1.shtml" target="_blank">
香港的车位价格,没有高,只有更高<span class="art-ico art-ico-3" title="内有4张图片"></span>
</a>
</td>
<td><atarget="_blank" class="author">tonni1</a></td>
<td>63982</td>
<td>59</td>
<td title="2020-08-06 19:02">08-06 19:02</td>
</tr>
<tr>
<td class="td-title faceblue">
<span class="face" title="普通帖">
</span>
<a href="/post-develop-2448630-1.shtml" target="_blank">
读个书好难呀
</a>
</td>
<td><atarget="_blank" class="author">饼饼干丶</a></td>
<td>18970</td>
<td>90</td>
<td title="2020-08-06 18:57">08-06 18:57</td>
</tr>
比如这段代码,我要的是有精华帖那一段中的<a href=,这个用正则该如何做呢 加油 cdzjf 发表于 2021-1-15 20:57
假设没有换行符,或者如下的网页代码
{:10_292:}网页标签最好还是用第三方库比如pyquery
c= """上面的html"""
b = re.findall(r'精华帖.*?</a>',c,re.S)
a = re.findall(r'href="(.*?)"',b,re.S)
print(a) kogawananari 发表于 2021-1-15 21:21
网页标签最好还是用第三方库比如pyquery
哈哈,还是谢谢你,我总是问问题都没有问对,其实这个从关键字后面开始做正则这个还真不是什么大的问题
关键是从前面一段截取到关键字这里,我这个举例的有点问题,应该是关键字在后面,需要的内容在前面一段
页:
[1]