鱼C论坛

 找回密码
 立即注册
查看: 2578|回复: 15

正则如何向前匹配一个数据啊

[复制链接]
发表于 2021-1-14 22:41:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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=后面的内容呢


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-14 22:50:13 From FishC Mobile | 显示全部楼层
本帖最后由 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']
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-14 22:51:09 | 显示全部楼层
本帖最后由 °蓝鲤歌蓝 于 2021-1-14 23:30 编辑
s = re.search(r"a=\'(.*)\'b=x", c).group(1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-14 22:53:11 | 显示全部楼层
result = re.findall(r'a=(.*)', c)[-1]
result = re.findall(r'a=\'(.*)\'', c)[-1]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-15 01:41:17 | 显示全部楼层
正则表达式是从左往右匹配的
你这个其实可以匹配到
"内容1'b\na='内容2'b\na='内容3'b\na='内容4'b\na='内容5'"
"内容5'"
这两个
由于正则表达式解释器是个有限状态机
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-15 01:42:17 | 显示全部楼层
前一个匹配锁死了被检索的状态 后面那个就检索不到

举个例子  ababa里面去匹配aba 只能匹配到一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-15 01:44:11 | 显示全部楼层
上面的有人的答案是错的  看似结果是对的
因为你有换行  正则表达式的 . 是匹配不到换行符的 写的是错的但是得到正确结果了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-15 02:21:16 | 显示全部楼层
不要指望向前匹配 得换个思路匹配
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-15 02:29:37 | 显示全部楼层

不同模式主要会改变`.`以及`^`和`$`的匹配行为
- `None` 首行模式,默认的。只有第一行都有开头和结尾。换行符不会被匹配。
- `re.S` / `re.DOTALL` 单行模式,整个文本看成一行。换行符会被当作普通字符匹配。
- `re.M` / `re.MULTILINE` 多行模式,每一行都有开头和结尾。换行符不会被匹配。
- `re.I` / `re.IGNORECASE`忽略大小写模式。
多行匹配加re.S模式才是最真实的 上面楼的有的答案加了re.S或者去掉你原字符串的换行后 结果就会错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-15 02:30:19 | 显示全部楼层
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[0][::-1])


倒着匹配大法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-15 20:55:00 | 显示全部楼层

如果是一行的呢,我试过如果不加换行,你这个就匹配和我之前那个一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-15 20:55:36 | 显示全部楼层

你这个完全是从后向前,连匹配出来的都是
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-15 20:57:46 | 显示全部楼层
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><a  target="_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><a  target="_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><a  target="_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><a  target="_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><a  target="_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><a  target="_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><a  target="_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><a  target="_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><a  target="_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><a  target="_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><a  target="_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=,这个用正则该如何做呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-15 20:57:56 | 显示全部楼层
加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-15 21:21:30 | 显示全部楼层
cdzjf 发表于 2021-1-15 20:57
假设没有换行符,或者如下的网页代码

                                                       

网页标签最好还是用第三方库比如pyquery
c= """上面的html"""
b = re.findall(r'精华帖.*?</a>',c,re.S)
a = re.findall(r'href="(.*?)"',b[0],re.S)
print(a)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-16 14:17:26 | 显示全部楼层
kogawananari 发表于 2021-1-15 21:21
网页标签最好还是用第三方库比如pyquery

哈哈,还是谢谢你,我总是问问题都没有问对,其实这个从关键字后面开始做正则这个还真不是什么大的问题
关键是从前面一段截取到关键字这里,我这个举例的有点问题,应该是关键字在后面,需要的内容在前面一段
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 21:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表