python regex - 如何创建和引用任意,未知数量的组

时间:2016-07-22 18:11:00

标签: python regex

我有一个由空格分隔的文本值组成的文本文件:

a: b c d e f g
h: i j k
l:
m: n

我不知道这些价值中有多少 - ;的权利 - 我有先验。

我想在正则表达式中使用Python groups来引用每个捕获。

GnuATgtRE = re.compile(br'^\r\n(?P<target>.+): (?P<deps>.*)\r\n# Implicit rule search has', re.MULTILINE)

目前,<target>引用分号左侧的项目,<deps>引用右侧的一个字符串中的所有内容。

我不知道每个deps会有多少target个。{/ p>

语法(?P<text>) is used to create a group which can be used to reference a specific captured sub-regex

例如,对于第1行

match_obj.group('target') = a match_obj.group('deps') = b c d e f g

第2行:

match_obj.group('target') = h match_obj.group('deps') = i j k

问题

执行match = GnuATgtRE.search(string)后,我希望能够通过dep引用每个空格分开的match.group('some_text')

问题在于我不知道是否有办法创建任意数量的未命名组。

对于第1行,我希望能够说match.group('<5>')并返回d

对于第2行,match.group('<5')应该返回“`,因为那里只有5个字母。

1 个答案:

答案 0 :(得分:2)

请参阅this answer

  

常用的大多数或所有正则表达式引擎,特别是那些基于PCRE语法的正则表达式引擎(如Python),在写正则表达式时,根据左括号的数字索引标记其捕获组。所以不,你不能单独使用捕获组从字符串中提取任意数量的可变数量的子序列。

更好的解决方案是在行上x:之后的所有内容上调用line.split()。