在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'

它正确地存储e0edge组,BIKE-EVENTlabel1组,"biking"word组。最后一组label2是字符串的稍有不同的变体,如下所示。请注意,label2当给定如下所示的字符串时regex组的行为符合预期。

'e29 e30 "of" :: of, OF'

但是,正则表达式模式label1使用值填充e30.。事实是,此字符串没有任何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]+)')

阿巴内特

如果要edge匹配"e29 e30",则必须将重复放在组内,而不是在组外。

您可以通过在重复edge组中插入一个新组来做到+这一点-很好,尽管您可能希望在其中不使用捕获组-但您忘记在重复组中包含空格。

(您还留下了外部重复,并使用了一个捕获组,您可能想要不捕获,但是不太严重。)

看一下那个片段:

(?P<edge>(e[0-9]+)+)

正则表达式可视化

Debuggex演示

在这里,表达式捕获e29为一个匹配项,然后e30为后续匹配项。因此,如果将其他任何内容添加到表达式中,它要么会丢失e29,要么就会失败。但是添加空间:

(?P<edge>(e[0-9]+ )+)

正则表达式可视化

Debuggex演示

现在,它是匹配项,e29 e30加上尾随空格作为单个匹配项,这意味着您可以附加任何其他内容,并且可以正常工作(只要您正确地获得了这些额外的内容-您仍然需要删除这些额外的内容+,我想您可能需要使其他两个重复变得非贪婪...)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

遍历Rust中的命名正则表达式组

来自分类Dev

在Python中遍历正则表达式

来自分类Dev

在Python中遍历正则表达式

来自分类Dev

Python正则表达式组

来自分类Dev

Python正则表达式组

来自分类Dev

python中的组正则表达式

来自分类Dev

Python中的可选正则表达式组失败

来自分类Dev

正则表达式中的组

来自分类Dev

如何遍历正则表达式的匹配组

来自分类Dev

如何遍历正则表达式的匹配组

来自分类Dev

正则表达式在Python中循环列表

来自分类Dev

拆分正则表达式并循环遍历

来自分类Dev

替换正则表达式循环中的组

来自分类Dev

正则表达式:捕获组中的捕获组

来自分类Dev

捕获组中的正则表达式捕获组

来自分类Dev

VBA中正则表达式组中的正则表达式

来自分类Dev

正则表达式:组或组

来自分类Dev

python中的正则表达式

来自分类Dev

python中的正则表达式

来自分类Dev

python中的正则表达式*

来自分类Dev

python中的正则表达式

来自分类Dev

遍历Rust正则表达式中的捕获字段

来自分类Dev

使用Python正则表达式在非捕获组中的多个捕获组

来自分类Dev

遍历正则表达式查找

来自分类Dev

Python正则表达式命名组以

来自分类Dev

Python正则表达式子组捕获

来自分类Dev

Python正则表达式findall捕获重复的组

来自分类Dev

python正则表达式搜索findall捕获组

来自分类Dev

Python捕获组并用正则表达式引用