[英]Parse a substring in Python using regular expression
我正在尝试使用re解析子字符串。
从存在于变量s中的字符串开始,我想将存在的字符串拆分到第一个! (存储在s中的字符串有两个! )并将其存储为一个子字符串。我希望从这个子字符串(存储在变量result中 )解析另一个子字符串。
这是代码,
import re
s='ecNumber*2.4.1.11#kmValue*0.57#kmValueMaximum*1.25#!ecNumber*2.3.1.11#kmValue*0.081#kmValueMaximum*#!'
Data={}
result = re.search('%s(.*)%s' % ('ec', '!'), s).group(1)
print result
ecNumber = re.search('%s(.*)%s' % ('Number*', '#kmValue*'), result).group(1)
Data["ecNumber"]=ecNumber
print Data
与子字符串中存在的每个标签相对应的值(示例:ecNumber)存储在*和#之间(示例:* 2.4.1.11#)。我试图解析为第一个子字符串中的ecNumber标签存储的值。 我得到的输出是
result='Number*2.4.1.11#kmValue*0.57#kmValueMaximum*1.25#!ecNumber*2.3.1.11#kmValue*0.081#kmValueMaximum*#'
{'ecNumber': '*2.4.1.11#kmValue*0.57#kmValueMaximum*1.25#!ecNumber*2.3.1.11#kmValue*0.081'}
所需的输出是
result= 'ecNumber*2.4.1.11#kmValue*0.57#kmValueMaximum*1.25#'
{'ecNumber': '2.4.1.11'}
我想存储每个标签及其对应的值。例如,
{'ecNumber': '2.4.1.11','kmValue':'0.021','kmValueMaximum':'1.25'}
您可以尝试以下方法:
import re
s='ecNumber*2.4.1.11#kmValue*0.57#kmValueMaximum*1.25#'
new_data = re.findall('(?<=^)[a-zA-Z]+(?=\*)|(?<=#)[a-zA-Z]+(?=\*)|(?<=\*)[-\d\.]+(?=#)', s)
final_data = dict([new_data[i:i+2] for i in range(0, len(new_data)-1, 2)])
输出:
{'kmValue': '0.57', 'kmValueMaximum': '1.25', 'ecNumber': '2.4.1.11'}
尽管您正在问一个带有正则表达式的解决方案,但我会说使用直接字符串操作解决此问题要容易得多,因为源字符串格式正确。
对于第一个i
之前的信息:
print dict([i.split('*') for i in s.split('!', 1)[0].split('#') if i])
有关s
所有信息:
print [dict([i.split('*') for i in j.split('#') if i]) for j in s.split('!') if j]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.