1

我正在尝试用 sublime 编写自己的语法荧光笔。我认为它使用基于 python 的正则表达式。只想匹配一行中的所有标记,例如:

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

我的正则表达式看起来像:

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

现在我希望第 1 组有 1 场比赛(“description”),第 2 组有 1 场比赛(“str.bla”),第 4 组有 3 场比赛(“str.blub”、“str.yeah”、“str.不”)

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

非常感谢!

4

2 回答 2

1

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

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

(123\d)+

和字符串:

123412351236

您会发现捕获组将仅包含1236.

我不知道解决这个问题的任何方法(除了硬编码要捕获的子组的数量),但您可以尝试像这样捕获整个组:

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

哪个应该给你

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

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

于 2013-08-13T14:38:29.270 回答
1

尝试这个:

regex = "(description) (str\\.[\\w\\d]+)((?:,\\s*(?:str\\.[\\w\\d]+))*)"
于 2013-08-13T14:34:10.333 回答