【发布时间】:2014-12-02 02:09:54
【问题描述】:
编辑:我已经搞定了——我忘记在多个边上放置一个空格作为分隔符。
我有这个 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 用于字符串的稍微不同的变体,如下所示。请注意,label2 正则表达式组在给定如下字符串时会按预期运行。
'e29 e30 "of" :: of, OF'
然而,正则表达式模式用值e30. 填充label1 事实上,这个字符串没有任何label1 值——它应该是None 或至少是空字符串。一个特别的解决方案是使用正则表达式解析label1 以确定它是实际标签还是只是另一个边缘。我想知道是否有办法修改我的原始正则表达式,以便edge 组包含所有edges。例如,上述字符串的输出将是:
edge = "e29 e30"
label1 = None
word = of
label2 = of, OF
我在下面尝试了这个解决方案,我认为这将转化为简单地循环第一组edge(如果我有一个实际的 FSA,这将是微不足道的),但它不会改变正则表达式的行为。
edge_value_pattern = re.compile(r'(?P<edge>(e[0-9]+)+) +(?P<label1>[^ ]*)[^"]+"(?P<word>[^"]+)"[^:]+:: (?P<label2>[^\n]+)')
【问题讨论】:
标签: python regex python-2.7