繁体   English   中英

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

[英]Confusion about repeating pattern in python Regex

我对在Python正则表达式中重复模式感到困惑。 我从文档中了解到,“ *”表示重复零至N次。 假设我有一个字符串abc123def 我想找到包含数字字符的子字符串的位置,因此我使用以下代码:

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

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

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

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

它确实起作用,它在字符串的开头找到了一个零长度的字符串。

查看正在发生的另一种方法是使用findall

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

VS

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

视觉上使用regex101

*表示第一个机会为“零或更多”。 字符串开头的数字为零。 火柴! 并且匹配项是字符串中的每个字符。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM