我们都知道*
表示0或更多,除非与非贪婪的运算符?
一起使用,否则它将始终是贪婪的。
>>> re.search('.*hello','hai hello there, hello again').group()
'hai hello there, hello'
>>> re.search('.*?hello','hai hello there, hello again').group()
'hai hello'
我刚刚看到以下代码,并且看到这种行为并不奇怪。
>>> re.search('\^*','abc^').group()
''
>>> re.search('a*','abc^').group()
'a'
使用模式\^*
,我希望它匹配字符串中出现的一个插入符号。
但是,为什么它必须通过退出0出现的插入符号,空字符串匹配来表现非贪婪?
是因为^
对正则表达式有特殊意义吗?如果是,那么我们如何将^
与*
符号相匹配?
注意:当然,以\^+
作为模式,它显然会匹配文字插入符号。
答案 0 :(得分:1)
正则表达式引擎从左到右解析输入字符串,因此,\^*
在开始时匹配空字符串,而re.search
仅返回第一次出现的字符串。
当您搜索某些内容时,应避免使用可能与空字符串匹配的模式,\^*
是匹配0个或更多^
个符号的模式。因此,最佳解决方案是使用+
代替*
。
答案 1 :(得分:0)
a
并返回此a
回答你的问题“我们如何将^与*符号相匹配?”
您可以使用组(\^+)*
并获取该组的结果:
re.search('(\^+)*','abc^^ab').group()