【发布时间】:2016-07-23 02:23:24
【问题描述】:
我有一个由空格分隔的文本值组成的文本文件:
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> 引用右侧的一个字符串中的所有内容。
我不知道每个target 会有多少个deps。
例如,对于第 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) 之后,我希望能够通过match.group('some_text') 引用每个空格分隔的dep。
问题是我不知道是否有办法创建任意数量的未命名组。
对于第 1 行,我希望能够说 match.group('<5>') 并返回 d。
对于第 2 行,match.group('<5') 应该返回 `` 因为只有 5 个字母。
【问题讨论】:
-
它真的是一个任意数字,还是有一定的限制(例如,10 或 100)?此外,您可能会在此处使用
pyparsing或其他更强大的解析器。 -
为什么不能在空间上拆分第 2 组?
-
@cxw 这很随意。这是来自
make的输出。需要明确的是,我知道我可以这样做matchObj.group('deps').split()。 . .嗯。我想我刚刚解决了我的问题。 -
我会选择
target, deplist = line.strip().split(':'),然后是deps = deplist.strip().split()...没有理由用正则表达式不必要地复杂化... -
我正在使用
mmap,它只能使用字节数组字符串进行正则表达式搜索。