编辑:我已经得到它的工作 - 我忘记把它放在一个空间作为多边的分隔符。在Python正则表达式中循环遍历组
我有这个Python正则表达式,它处理大部分我必须解析的字符串。
edge_value_pattern = re.compile(r'(?P<edge>e[0-9]+) +(?P<label1>[^ ]*)[^"]+"(?P<word>[^"]+)"[^:]+:: (?P<label2>[^\n]+)')
下面是一个例子字符串,我正则表达式是为了解析:
'e0 BIKE-EVENT 1 "biking" 2'
它正确地存储e0
到edge
组,BIKE-EVENT
到label1
组,"biking"
进入word
组。最后一组label2
用于字符串的稍微不同的变化,如下所示。请注意0正则表达式组的行为与预期的字符串类似,如下所示。
'e29 e30 "of" :: of, OF'
然而,正则表达式中label1
填充与价值e30.
事实是,这个字符串没有任何label1
价值 - 它应该是None
或至少空字符串。一个特别的解决方案是用正则表达式解析label1
,以确定它是一个实际的标签还是另一个边。我想知道是否有办法修改我的原始正则表达式,以便组edge
需要所有edges
。例如,输出上面的字符串将是:
edge = "e29 e30"
label1 = None
word = of
label2 = of, OF
我试过低于这个解决方案,我认为会转化为简单的遍历第一组,edge
(如果我有一个实际的FSA,这将是微不足道的),但它不会改变re的行为GEX。
edge_value_pattern = re.compile(r'(?P<edge>(e[0-9]+)+) +(?P<label1>[^ ]*)[^"]+"(?P<word>[^"]+)"[^:]+:: (?P<label2>[^\n]+)')