RegEx仅匹配最后一项

时间:2013-08-13 14:26:55

标签: regex regex-lookarounds regex-greedy

我正在尝试在sublime中编写自己的语法高亮显示器。我认为它使用基于python的正则表达式。只想匹配所有令牌,如:

描述str.bla,str.blub,str.yeah,str.no

我的正则表达式如下:

regex = "(description) (str\\.[\\w\\d]+)(,\\s*(str\\.[\\w\\d]+))*"

现在我期待第1组(“描述”)中的1场比赛,第2组中的1场比赛(“str.bla”)和我的第4组中的3场比赛(“str.blub”,“str.yeah”, “str.no”)

但我在上一组(“str.no”)中只有一场比赛。那里发生了什么?

非常感谢!

2 个答案:

答案 0 :(得分:1)

如果您有重复的捕获组(例如(a)*(a)+等),则捕获组将仅包含最后一个匹配。

所以,如果我有正则表达式:

(123\d)+

字符串:

123412351236

您会发现捕获组仅包含1236

我对此没有任何了解(除了硬编码要捕获的子组数量),但你可以尝试像这样捕获整个组:

regex = "(description) (str\\.[\\w\\d]+)((?:,\\s*(?:str\\.[\\w\\d]+))*)"

哪个应该给你

['description', 'str.bla', ', str.blub, str.yeah, str.no']

注意元素是如何分组的;您在列表中有3个项目,最后一个是'列表'在更大的列表中。

答案 1 :(得分:0)

试试这个:

regex = "(description) (str\\.[\\w\\d]+)((?:,\\s*(?:str\\.[\\w\\d]+))*)"