关于在python Regex中重复模式的困惑

时间:2017-07-06 14:33:58

标签: python regex

我对在Python正则表达式中重复模式感到困惑。 我从文档中读到' *'意味着重复0到N次。假设我有一个字符串abc123def。我想找到包含数字字符的子字符串的位置,所以我使用以下代码:

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

输出(0,0) 如果我将正则表达式更改为[\d]+,则会输出(3,6)

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

另一种了解情况的方法是使用findall

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

VS

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

visually使用regex101

*表示零或更多'在第一次机会。您在字符串的开头有零位数。一场比赛!这些匹配是字符串中的每个字符。

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