Regex团队和*通配符可以一起工作吗?

D.C*_*.C. 5 python regex

是否有任何方法可以将组和正则表达式的*特征组合起来,像tokenizer/splitter一样.我试过这个:

my_str = "foofoofoofoo"
pattern = "(foo)*"
result = re.search(pattern, my_str)
Run Code Online (Sandbox Code Playgroud)

我希望我的团队看起来像

("foo", "foo", "foo", "foo")
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.我对此感到惊讶,因为?和组功能一起工作:

my_str= "Mr foo"
pattern = "(Mr)? foo"
result = re.search(pattern, my_str)
Run Code Online (Sandbox Code Playgroud)

ste*_*ema 4

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

有关详细信息,请参阅Regular-Expression.info 上的重复捕获组与捕获重复组。(但是捕获重复的组也不是你想要的)

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

这会给你预期的结果:

my_str = "foofoofoofoo"
pattern = "foo"
result = re.findall(pattern, my_str)
Run Code Online (Sandbox Code Playgroud)

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