我有json文件,如:
{
"level0name":{
"level1name":[
{
"notkey":null,
"key":"Some text 626 dollars."
},
{
"notkey":null,
"key":"Some text 3213 dollars."
}
]
}
}
和用正则表达式解析json的python代码
import json
import re
path = 'name.json'
def parser():
with open(path, 'r') as jfile:
data = json.loads(jfile.read())
for i in data["level0name"]["level1name"]:
try:
all_messages = (i['key'])
a = re.findall(u'[0-9]{1,}\sdollars.', all_messages)
for i in a:
print(i)
except KeyError:
continue
parser()
函数结果给了我许多列表,并且不能合并它。
[625 dollars]
[3213 dollars]
[121 dollars]
[692 dollars]
我怎样才能获得单一名单?也许我在解析时做错了什么? 只需要一个以逗号分隔的列表。像:
[625, 3213, 121, 692]
答案 0 :(得分:0)
您可以略微更改正则表达式,以便包括一个积极的前瞻和列表:
import json
import re
path = 'name.json'
def parser():
with open(path, 'r') as jfile:
data = json.loads(jfile.read())
final_list = [] #for collecting the data
for i in data["level0name"]["level1name"]:
try:
all_messages = (i['key'])
a = re.findall(u'[0-9]{1,}(?=\sdollars\.)', all_messages)
if a:
final_list.append(int(a[0])) #append to final_list
except KeyError:
continue
parser()
或者,您可以阅读该文件并应用正则表达式:
import re
final_data = map(int, re.findall('\d+(?=\sdollars\.)', open('path.json').read()))
答案 1 :(得分:0)
使用稍长的JSON输入文件:
{
"level0name":{
"level1name":[
{
"notkey":null,
"key":"Some text 626 dollars."
},
{
"notkey":null,
"key":"Some text 3213 dollars."
},
{
"notkey":null,
"key":"Some text 121 dollars."
},
{
"notkey":null,
"key":"Some text 692 dollars."
}
]
}
}
此代码:
import json
import re
path = 'name.json'
def parser():
results = []
with open(path, 'r') as jfile:
data = json.loads(jfile.read())
for i in data["level0name"]["level1name"]:
try:
match = re.search(r'([0-9]{1,})\sdollars.', i['key'])
if match:
results.append(match.group(1))
except KeyError:
continue
return results
print(parser()) # -> ['626', '3213', '121', '692']
似乎做你想做的事。注意如何将一对括号添加到正则表达式模式以指示模式的部分(也称为组)具有感兴趣的字符。这些是捕获括号而不是documentation中的非捕获括号(>:...)
- 换句话说,常规括号是捕获的类型。