簡體   English   中英

使用正則表達式解析Python中的子字符串

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM