有什么方法可以组合组和正则表达式的*功能来充当某种类似于分词器/拆分器的行为。我尝试了这个:

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

我希望我的小组看起来像
("foo", "foo", "foo", "foo")

但事实并非如此。我对此感到惊讶,因为?和组功能可以一起使用:
my_str= "Mr foo"
pattern = "(Mr)? foo"
result = re.search(pattern, my_str)

最佳答案

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

有关更多信息,请参见regular-expression.info上的Repeating a Capturing Group vs. Capturing a Repeated Group。 (但是捕获重复的小组也不是您想要的)

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

这将给您预期的结果:

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

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

09-30 15:31
查看更多