Python 正则表达式结果
我有以下代码:Python 正则表达式结果,python,regex,Python,Regex,我有以下代码: import re line = "78349999234"; searchObj = re.search(r'9*', line) if searchObj: print "searchObj.group() : ", searchObj.group() else: print "Nothing found!!" 但是,输出是空的。我认为*意味着:使结果RE与前面RE的0个或更多重复匹配,尽可能多的重复ab*将匹配'a','ab'或'a',后跟任意数量的'b
import re
line = "78349999234";
searchObj = re.search(r'9*', line)
if searchObj:
print "searchObj.group() : ", searchObj.group()
else:
print "Nothing found!!"
但是,输出是空的。我认为
*
意味着:使结果RE与前面RE的0个或更多重复匹配,尽可能多的重复ab*
将匹配'a'
,'ab'
或'a'
,后跟任意数量的'b'
s。为什么在这种情况下我看不到任何结果?我认为正则表达式从左到右匹配。因此,匹配的第一个模式是7…
之前的空字符串。如果它找到一个9
,它确实会匹配它:并尝试“吃”(这是正确的术语)尽可能多的字符
如果您查询:
>>> print(re.findall(r'9*',line));
['', '', '', '', '9999', '', '', '', '']
它匹配字符之间的所有空字符串,如您所见,9999
也匹配
主要原因可能是性能:如果您在一个超过10万个字符的字符串中搜索一个模式,如果该模式已经在前10万个字符中,您会非常高兴。你不想浪费精力去寻找“最好”的匹配
编辑 如果出现0次或多次,则表示该组(在本例中为
9
)重复0次或多次。在空字符串中,字符正好重复0次。如果要匹配字符重复一次或多次的模式,应使用
9+
这导致:
>>> print(re.search(r'9+', line));
<_sre.SRE_Match object; span=(4, 8), match='9999'>
打印(重新搜索(r'9+,行));
re.search
对于接受空字符串的模式可能没有多大帮助,因为它总是在第一个字符串的实际开始之前匹配空字符串。主要原因是,re.search
函数一旦找到匹配项,就会停止搜索字符串<代码>9*表示匹配数字9零或更多次。因为每个字符前面都有一个空字符串,re.search
函数在找到第一个空字符串后停止搜索。这就是为什么您得到一个空字符串作为输出…谢谢,0或更多出现是什么意思?这些天我没能在斯塔克福看到谋杀案。它看起来很模糊。有什么原因吗?答案没有解释OP可能需要的修复:9+
而不是9*
@user3369157:你说的“cide”是什么意思,这是“side”的错别字吗?你有没有在浏览器中覆盖样式表?也许你可以选择代码和它的“反转”颜色…它的外观如我刚才添加的ic所示。我也无法查看我正在键入的内容。为什么要将问题的截图粘贴到问题中?这与这个问题无关。如果您有一个关于StAcExpod的问题,请在这里发布,而不是在一个无关的问题的中间。