python 正则匹配内容求助

2016-02-26 07:32:23 +08:00
 luyg

各位大神,我有一段话是这样的,想匹配从礼拜开始到理财之间的内容,我写的正则匹配不出来,求大神帮忙。

b= 'hello this is book . \n \
test . \n \
abc 礼拜 test \n \
doing what ? \n \
abc 理财 ddd \n \
this is the end '
print b
print re.search(u'礼拜(.*?)理财',b)
这里输出是 None ,但是如果不加后面的理财,就可以匹配上。

2682 次点击
所在节点    Python
11 条回复
v2014
2016-02-26 07:41:31 +08:00
re.search(u'礼拜(.*?)理财',b, re.DOTALL))
https://docs.python.org/3/library/re.html#re.DOTALL
默认.不包括换行,加了 DOTALL 标志才是所有字符
popok
2016-02-26 08:16:05 +08:00
@v2014 礼拜([^理财]*)理财
换行也包括了,哈哈
lonelinsky
2016-02-26 10:02:35 +08:00
@popok 但是你这样的写法,如果中间出现单独的理字或财字就会出问题了…
thinkmore
2016-02-26 10:10:58 +08:00
(?s)(?<=(礼拜)).*(?=理财)

python3.4 下测试通过
thinkmore
2016-02-26 10:11:47 +08:00
@luyg 匹配的内容不包括礼拜和理财
lxy
2016-02-26 10:14:54 +08:00
print re.search('礼拜(.+?)理财', b, re.S).group(0)
如果匹配之间的字符就 group(1)
wentian
2016-02-26 10:17:49 +08:00
regex = re.compile(ur'(?!礼拜).+(?=理财)'), re.UNICODE | re.DOTALL | re.MULTILINE)
popok
2016-02-26 10:21:23 +08:00
@lonelinsky 对的,回完贴就发现了,哈哈
wentian
2016-02-26 10:23:46 +08:00
(?<=礼拜).+(?=理财)
上面用错了环视功能,楼主试试这个, 我已经测试通过了
:)
luyg
2016-02-26 12:46:48 +08:00
@v2014 测试通过谢谢。
luyg
2016-02-26 12:47:37 +08:00
在这统一感谢,谢谢大家的帮助。问题圆满解决。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/259184

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX