Python正则表达式学习中遇到的问题
最近开始看鱼C的视频,在学习正则表达式的时候遇到一个问题>>> import re
>>> a = "xaxbcdefgy"
>>> b = "xaxbcdefgyhy"
>>> c = "xayxbcy"
>>> re.search(r'x.+?y', a)
<_sre.SRE_Match object; span=(0, 10), match='xaxbcdefgy'>
>>> re.search(r'x.+?y', b)
<_sre.SRE_Match object; span=(0, 10), match='xaxbcdefgy'>
>>> re.search(r'x.+?y', c)
<_sre.SRE_Match object; span=(0, 3), match='xay'>
上面的a,b,c三个字符串,我都是想要匹配以x开头,以y结尾的最短字符串,也就是a和b是想匹配“xbcdefgy”这一段字符串,c想要匹配"xay"。
但是事实上,运行了以上代码进行测试的时候,就算用了非贪婪的状态,只有c的匹配是正确的,a和b左边x都匹配到了第一个x,这样的话请问应该怎样修改这一段代码? 正则并非万能,它没有统计计算的功能,只能按照共性特征进行匹配。什么最长最短的要求,在特殊的条件下可能会达到,但往往不具备通用性。就你例子的这三行来说,第一二行达成最短的x到y的匹配是可以做到的,但是加上第三行后,我认为是不太可能三行都做到的,因为它们的关键特征相互矛盾。 不用修改了,你要的结果直接使用一次正则是实现不了的{:10_256:},你要找的是一个嵌套在匹配结果里的字符串,而正则匹配成功了就会直接跳过这段字符串,不会在这个已经匹配成功的字符串里去找新的匹配结果,想要实现这个功能,你就要自己实现了。比如:(仅供参考,随手写的,可能有bug{:10_304:}看不懂得就调试着一步一步看效果)
def find_min_match(regex, str):
match_results = re.findall(regex, str)
matchs = list()
result = list()
for match_result in match_results:
matchs.append(match_result)
if len(match_result) > 1:
matchs += find_min_match(regex, match_result)
for match in matchs:
if result == list():
result.append(match)
elif len(result) >len(match):
result =
elif len(result) == len(match):
result.append(match)
else:
pass
return result re.search(r'xb.+?y', a)
re.search(r'xb.+?y', y)
?
谢谢上面的各位大佬指导 这方面了解了。 {:10_249:}不错。 不错。。
页:
[1]