5

有什么方法可以将组和正则表达式的 * 特征组合起来,就像分词器/拆分器一样。我试过这个:

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)
4

2 回答 2

4

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

有关更多信息,请参阅regular-expression.info 上的重复捕获组与捕获重复组。(但捕获重复组也不是您想要的)

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

这会给你预期的结果:

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

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

于 2012-07-10T08:53:18.567 回答
3

捕获组和 * 不适用于内置的 re 模块 - 请改用 findall。

在 pypi 中有一个名为 regex 的库,我相信它支持该语法并具有一些其他功能,例如可变长度回溯。

于 2012-07-10T08:29:41.527 回答