为什么python中的重新搜索(r';(ab*)';';aaaaabbbb';,re.I)会给出结果';a';而不是';abbbb';尽管';关于I';使用了什么?
在python中,为什么python中的重新搜索(r';(ab*)';';aaaaabbbb';,re.I)会给出结果';a';而不是';abbbb';尽管';关于I';使用了什么?,python,regex,Python,Regex,在python中,re.search() 那么,我们为什么不在Ex(1)中以'abbbb'的形式获得输出,正如我们在下面的Ex(2)和Ex(3)中发现的那样 行政长官(1) 行政长官(2) 行政长官(3) 示例1正在搜索a,后跟零个或多个b,忽略大小写。这正好匹配字符串的开头。正则表达式引擎将看到该匹配并使用它。它不会寻找任何其他匹配项 示例2搜索ab,然后搜索尽可能多的字符串。示例3正在搜索a,后面至少有一个b。不同之处在于,每个示例都需要至少一个b,而示例1不需要。: 检查字符串中的任何位置
re.search()
那么,我们为什么不在Ex(1)中以'abbbb'的形式获得输出,正如我们在下面的Ex(2)和Ex(3)中发现的那样
行政长官(1)
行政长官(2)
行政长官(3)
示例1正在搜索a
,后跟零个或多个b
,忽略大小写。这正好匹配字符串的开头。正则表达式引擎将看到该匹配并使用它。它不会寻找任何其他匹配项
示例2搜索ab
,然后搜索尽可能多的字符串。示例3正在搜索a
,后面至少有一个b
。不同之处在于,每个示例都需要至少一个b
,而示例1不需要。:
检查字符串中的任何位置是否匹配(Perl默认情况下就是这样做的)
这将尝试匹配a
(忽略大小写),后跟零个或多个b
。它在第一个a
中找到匹配项,因为它后面跟着零b
,然后返回它
re.search(r'(ab.*)', 'aaAaABBbbb', re.I)
这一个将尝试匹配a
,后跟b
,然后匹配任何内容(*
是贪婪的)。它匹配abbbb
,因为它是匹配正则表达式的第一个序列
re.search(r'(ab+)', 'aaAaABBbbb', re.I)
最后,这将匹配a
,后跟至少一个b
(再次忽略大小写)。第一个匹配是abbbb
,它被返回。,因为re.search
将只返回第一个匹配。试试re.findall
你应该试试re.search('(a*b*),'aaaaabbbb',re.I)
@AvinashRaj是对的re.findall(r'(ab*),'aaaaabbbb',re.I)
将返回['a','a','a','abbbb']
。在不到18秒的时间内进行表决?这是对某人的快速阅读:)18秒对于这个答案来说太多了。我花了10秒钟的时间投票。我很感激你澄清我的疑问的方式。:)谢谢@TomZych@AvinashRaj是的,我想。仅仅解释它,而不是四处寻找复制品,往往更容易。诚然,这样系统将充满大量的副本。
>>> s=re.search(r'(ab+)','aaAaABBbbb',re.I)
>>> print s.group()
ABBbbb
re.search(r'(ab*)', 'aaAaABBbbb', re.I)
re.search(r'(ab.*)', 'aaAaABBbbb', re.I)
re.search(r'(ab+)', 'aaAaABBbbb', re.I)