我正在尝试在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”)中只有一场比赛。那里发生了什么?
非常感谢!
答案 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]+))*)"