各位大神,我有一段话是这样的,想匹配从礼拜开始到理财之间的内容,我写的正则匹配不出来,求大神帮忙。
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 ,但是如果不加后面的理财,就可以匹配上。
1
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 标志才是所有字符 |
3
lonelinsky 2016-02-26 10:02:35 +08:00
@popok 但是你这样的写法,如果中间出现单独的理字或财字就会出问题了…
|
4
thinkmore 2016-02-26 10:10:58 +08:00
(?s)(?<=(礼拜)).*(?=理财)
python3.4 下测试通过 |
6
lxy 2016-02-26 10:14:54 +08:00
print re.search('礼拜(.+?)理财', b, re.S).group(0)
如果匹配之间的字符就 group(1) |
7
wentian 2016-02-26 10:17:49 +08:00
regex = re.compile(ur'(?!礼拜).+(?=理财)'), re.UNICODE | re.DOTALL | re.MULTILINE)
|
8
popok 2016-02-26 10:21:23 +08:00
@lonelinsky 对的,回完贴就发现了,哈哈
|
9
wentian 2016-02-26 10:23:46 +08:00
(?<=礼拜).+(?=理财)
上面用错了环视功能,楼主试试这个, 我已经测试通过了 :) |
11
luyg OP 在这统一感谢,谢谢大家的帮助。问题圆满解决。
|