2017-07-06 79 views
0

我对Python正则表达式中的重复模式感到困惑。 我从文档中看到'*'表示重复零次N次。假设我有一个字符串abc123def。我想找到包含数字字符的字符串的位置,所以我用下面的代码:关于在python中重复模式的困惑Regex

p = re.compile(r'[\d]*') 
p.search('abc123def').span() 

,并将其输出(0,0) 如果我改变了正则表达式来[\d]+,它输出(3,6)

为什么正则表达式r'[\d]*'不起作用? 谢谢。

回答

2

它确实有效。 [\d]*(顺便说一句,括号是不必要的 - \d*将完全相同)匹配任何数字序列,包括0数字,即。一个空字符串。空字符串在任何地方匹配,特别是在字符串的开头。如果您想要非空数字序列,请使用\d+,就像您已经做过的一样。

+0

啊,好的,挺棘手的。他已经注意到了 – lenhhoxung

1

它确实有效,它会在字符串的开头找到一个零长度的字符串。

1

另一种方式来查看发生的情况是使用findall:在第一

>>> re.findall(r'\d*', 'abc123def') 
['', '', '', '123', '', '', '', ''] 

VS

>>> re.findall(r'\d+', 'abc123def') 
['123'] 

或者visually与regex101

*的意思是 '零个或多个'机会。您在字符串的开始处有零个数字。一场比赛!那匹配是字符串中的每个字符。

如果您想匹配子字符串,请使用+

+0

,并提出了问题 – newtover