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的问题,请在这里发布,而不是在一个无关的问题的中间。