提问人:tutizeri 提问时间:4/10/2018 最后编辑:tutizeri 更新时间:4/11/2018 访问量:266
无法将列表中的最后一项与正则表达式匹配
Cannot match last item in list with regular expression
问:
我需要使用 Python 中的正则表达式检测以下键/值对:
key_title=[a3;d2;g5;a5]
值是用“;”分隔的元素列表
...但它不起作用,因为 <values> 中的最后一个元素不以“;”结尾
我有这个python正则表达式:
(?P<key_values_pair>^(?P<text>\w+)\s*=\s*\[(?P<values>[a-zAZ]\d;)+\])
和这个数据匹配
title=[a3;d2;g5;a5] #comment
# other comment
some_key=[j7;k9]
答:
0赞
aliaksei
4/10/2018
#1
为什么不简单地将分号设置为可选,如下所示:
(?P<key_values_pair>^(?P<text>\w+)\s*=\s*\[(?P<values>[a-zAZ]\d;?)+\])
评论
0赞
tutizeri
4/11/2018
由于无法像在 .NET 正则表达式中那样恢复所有匹配的<值>,因此我会选择您的答案作为最佳答案,但它无法匹配所有出现的键值对 regex101.com/r/hdmn3s/3
1赞
Scott Weaver
4/10/2018
#2
这似乎有效,我稍微简化了一下,使分号可选:
(?P<key>\w+)=\[(?P<values>(\w+\d;?)+)\]
评论
0赞
tutizeri
4/10/2018
但它将所有<值>捕获为一个匹配项(列表),而不是匹配键值对中的每个值
1赞
Casimir et Hippolyte
4/10/2018
@tutizeri:无法使用 RE 模块获取单个匹配列表,因为当您重复一个捕获组时,前一个捕获会被下一个捕获覆盖。您所能做的就是在括号之间描述所有内容,并在之后拆分。您还可以使用能够处理重复捕获的正则表达式模块。
1赞
tutizeri
4/10/2018
致读者:相关信息在这里 regular-expressions.info/captureall.html
上一个:为什么此函数不返回变量
评论