[英]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.