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