我将以下代码存储为Python中的字符串变量。如何使用正则表达式以及re.findall('', text)
来解析" attributeLookup"下的五个9位数字(全部以" 305 ..."开头)。在下面的代码中查找?
var PRO_META_JSON = {
"attributeDefinition":{
"defaultSku":305557121,
"attributeListing":[{
"label":"Finish",
"defaultIndex":0,
"options":[
"White::f33b4086",
"Beige::8e0900fa",
"Blue::3c3a4707",
"Orange::1d8cb503",
"Spring Green::dd5e599a"
]
}],
"attributeLookup":[
[0,305557121],
[1,305557187],
[2,305557696],
[3,305557344],
[4,305696435]
]
}
};
答案 0 :(得分:1)
这是一种方法。首先解析你的字符串以获取json对象(最外部大括号内的所有内容)。然后使用json模块解码json对象并访问您需要的内容。
astr = '''var PRO_META_JSON = {
"attributeDefinition":{
"defaultSku":305557121,
"attributeListing":[{
"label":"Finish",
"defaultIndex":0,
"options":[
"White::f33b4086",
"Beige::8e0900fa",
"Blue::3c3a4707",
"Orange::1d8cb503",
"Spring Green::dd5e599a"
]
}],
"attributeLookup":[
[0,305557121],
[1,305557187],
[2,305557696],
[3,305557344],
[4,305696435]
]
}
};'''
import re
import json
pat = re.compile('^[^\{]*(\{.*\});.*$', re.MULTILINE|re.DOTALL)
json_str = pat.match(astr).group(1)
d = json.loads(json_str)
for x in d['attributeDefinition']['attributeLookup']:
print x[1]
# 305557121
# 305557187
# 305557696
# 305557344
# 305696435
答案 1 :(得分:0)
string = '''var PRO_META_JSON = {
"attributeDefinition":{
"defaultSku":305557121,
"attributeListing":[{
"label":"Finish",
"defaultIndex":0,
"options":[
"White::f33b4086",
"Beige::8e0900fa",
"Blue::3c3a4707",
"Orange::1d8cb503",
"Spring Green::dd5e599a"
]
}],
"attributeLookup":[
[0,305557121],
[1,305557187],
[2,305557696],
[3,305557344],
[4,305696435]
]
}
};'''
import json
data = json.loads(string.split('=', 1)[1].strip(';'))
for d in data['attributeDefinition']['attributeLookup']:
print(d[1])
不知道为什么要使用正则表达式。你也带你的车去拜访你的邻居吗?
答案 2 :(得分:-5)
在findall中你想要选择9个字符之间的数字0到9,就像这样。使用json模块而不是存储为字符串仍然会更好。
我真的很有用python正则表达式的测试人员可以在这里找到
re.findall('[0-9]{9}', PRO_META_JSON.split('attributeLookup')[1])