簡體   English   中英

名稱值對的正則表達式

[英]Regex for name value pairs

我需要幫助開發針對以以下格式的fortran語法編寫的鍵值對的健壯正則表達式:

name = values* name=values* ...

字符串:

name="my name is" multipleValues = 0.543 0.754 1.166 multipleValues(2) = 'value' "Value2" 4.76454 100 single(1) = 10 single(2)=3.589  boolean = .True. .F. ! comment to mess things up

應該分為:

(name, "my name is"),
(multipleValues, [0.543, 0.754, 1.166])
(multipleValues(2), ['value', "Value2", 4.76454, 100])
(single(1), 10)
(single(2), 3.589)
(boolean, [.True., .F.])

試着

使用這個問題的正則表達式可以解決以下問題

"((?:\"[^\"]*\"|[^=,])*)=((?:\"[^\"]*\"|[^=,])*)"

但是,它包括值列表中等號后的所有文本:

>>> re.findall('((?:\"[^\"]*\"|[^=,])*)=((?:\"[^\"]*\"|[^=,])*)', testStr)
[('name', "'my name is' multipleValues "), ('', ' 0.543 0.754 1.166 multipleValues(2) '), ('', " 'value' 'Value2' 4.76454 100 single(1) "), ('', ' 10 single(2)'), ('', '3.589  boolean '), ('', ' .True. .F. ! comment to mess things up')]

也許需要后面看看?

注意:解決方案不必是單個表達式。

好吧,您可以使用以下命令獲取鍵和包含其所有值的字符串

(\w+(?:\(\d+\))?)\s*=\s*(.*?)(?=(!|$|\w+(\(\d+\))?\s*=))

組1是關鍵,組2是其所有值的總和。 RegExr示例。

蟒蛇:

使用該正則表達式,然后在適當的空間上拆分組2。

>>> matches = re.findall(r'(\w+(?:\(\d+\))?)\s*=\s*(.*?)(?=(!|$|\w+(\(\d+\))?\s*=))', testStr)
>>> keyval = {}
>>> for match in matches:
>>>     vals = match[1].strip()
>>>     keyval[match[0]] = re.split(r' (?![A-Za-z])', vals) 

輸出:

{
    'name': ['"my name is"'], 
    'single(1)': ['10'], 
    'single(2)': ['3.589'], 
    'multipleValues': ['0.543', '0.754', '1.166'], 
    'boolean': ['.True.', '.F.'], 
    'multipleValues(2)': ["'value'", '"Value2"', '4.76454', '100']
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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