regex python正则表达式-按dict值拆分

ifmq2ha2  于 2023-08-08  发布在  Python
关注(0)|答案(2)|浏览(92)

这是我的数据:

data= 'JUN 2023 02 20 INFO : data1 = data2 data3 = data4 {"app":[{"key":"app1","value":"100"},{"key":"app2","value":"200"},{"key":"app3","value":"300"}]}'

字符串
基于我这样写的模式:print(re.findall(r'(?:\w+ :)(\w+)\s*=\s*(.*?)(?=\s*\w+\s*=|$)', text))的。运行此代码后,我得到空列表。我尝试了多种模式,没有预期的结果。
我的预期结果是

[ 'data1' = 'data2',
  'data3' = 'data4'
  'app1' = '100',
  'app2' = '200',
  'app3' = '300',
]

vwkv1x7d

vwkv1x7d1#

我看到你的字符串包含Json(?),因此可以使用re + json来解析它。例如:

import re
import json

data = 'JUN 2023 02 20 INFO : data1 = data2 data3 = data4 {"app":[{"key":"app1","value":"100"},{"key":"app2","value":"200"},{"key":"app3","value":"300"}]}'

json_data = re.search(r"\{.*\}", data).group(0)
json_data = json.loads(json_data)

for k, v in json_data.items():
    for d in v:
        print(k, list(d.values()))

字符串
印刷品:

app ['app1', '100']
app ['app2', '200']
app ['app3', '300']


其余的数据可以通过以下方式解析:

for k, v in re.findall(r'(\S+) = (\S+)', data):
    print(k, v)


印刷品:

data1 data2
data3 data4

6ojccjat

6ojccjat2#

您可以使用re.findall和两个正则表达式来解决它:

>>> import re
>>> data = 'JUN 2023 02 20 INFO : data1 = data2 data3 = data4 {"app":[{"key":"app1","value":"100"},{"key":"app2","value":"200"},{"key":"app3","value":"300"}]}'
>>> re.findall(r"([^ ]+?) *= *([^ ]+)", data) + \
... re.findall(r"\"key\"\s*:\s*\"([^\"]+)\"\s*,\s*\"value\"\s*\:\s*\"([^\"]+)\"", data)
[('data1', 'data2'), ('data3', 'data4'), ('app1', '100'), ('app2', '200'), ('app3', '300')]

字符串
在哪里

相关问题