我对在Python正则表达式中重复模式感到困惑。
我从文档中读到' *'意味着重复0到N次。假设我有一个字符串abc123def
。我想找到包含数字字符的子字符串的位置,所以我使用以下代码:
p = re.compile(r'[\d]*')
p.search('abc123def').span()
输出(0,0)
如果我将正则表达式更改为[\d]+
,则会输出(3,6)
。
为什么正则表达式r'[\d]*'
不起作用?
感谢。
答案 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
*
表示零或更多'在第一次机会。您在字符串的开头有零位数。一场比赛!这些匹配是字符串中的每个字符。
如果要匹配子字符串,请使用+
。