Regex提取可变数量的键值对



虽然我发现了相当多的SO帖子谈论使用regex提取键/值对,我无法找到一个解决方案,为我的特殊用例

我有这样的键值对:

{date=2020-07-22, labelId=100000004}

键/值对的数目会有所不同。

我希望有一个正则表达式来提取这些作为键和值"组"就像groups[1:] = "date";2020-07-22";labelID"; "100000004

对于第一个匹配,

([a-zA-Z0-9]+)=((?:[^\\"]|\\.)*+)

…但我需要一种方法来"分裂"。在逗号

正则表达式大师能帮我解决这个问题吗?

提前感谢。

使用一个模式,从键中排除{=,从每个匹配的值中排除},

import re
data = '{date=2020-07-22, labelId=100000004}'
regex = '([^{=]+)=([^,}]+)'
print(re.findall(regex, data))

注意,这个正则表达式不允许引用键和/或值来让它们包含分隔符。这使得正则表达式的使用更加复杂。

可以使用

import re
text = "{date=2020-07-22, labelId=100000004}"
print(dict(re.findall(r'([a-zA-Z0-9]+)=([d-]+)', text)))
# => {'date': '2020-07-22', 'labelId': '100000004'}

参见Python演示和正则表达式演示。

Regex细节:

  • ([a-zA-Z0-9]+)-组1:任意一个或多个字母或数字
  • =- a=char
  • ([d-]+)-组2:一个或多个数字或-.

这里可以不使用正则表达式:

text = '{date=2020-07-22, labelId=100000004}'
print(dict([x.split('=') for x in text.strip('{}').split(', ')]))

参见Python证明。

也就是说,去掉字符串两端的大括号,用逗号分隔,然后用=分隔。

结果:{'date': '2020-07-22', 'labelId': '100000004'}

最新更新