正则表达式组和*通配符可以一起工作吗?

2024-10-03 02:41:27 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有任何方法可以将组和正则表达式的*特性结合起来,使其有点像标记器/拆分器。我试过了:

my_str = "foofoofoofoo"
pattern = "(foo)*"
result = re.search(pattern, my_str)

我希望我的团队看起来像

^{pr2}$

但事实并非如此。我很惊讶,因为?组功能确实可以协同工作:

my_str= "Mr foo"
pattern = "(Mr)? foo"
result = re.search(pattern, my_str)

Tags: 方法标记researchfoomy特性result
2条回答

问题是你重复你唯一的捕捉组。这意味着您只有一个括号==>一个捕获组,并且每次匹配时该捕获组都会被覆盖。在

参见Repeating a Capturing Group vs. Capturing a Repeated Group关于常规-表达式.info了解更多信息。(但捕获重复的组也不是您想要的)

因此,在正则表达式完成后,捕获组1将包含最后找到的“foo”。在

这将为您提供预期的结果:

my_str = "foofoofoofoo"
pattern = "foo"
result = re.findall(pattern, my_str)

结果是一个列表['foo', 'foo', 'foo', 'foo']

捕获组和*不要使用内置的re模块,而是使用findall。在

pypi中有一个名为regex的库,我相信它支持这种语法,并且有一些其他特性,比如可变长度的回溯。在

相关问题 更多 >