虽然我发现了相当多的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'}