gpt4 book ai didi

python - 名称值对的正则表达式

转载 作者:行者123 更新时间:2023-12-01 05:30:40 26 4
gpt4 key购买 nike

我需要帮助开发一个强大的正则表达式,该正则表达式针对以 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.])

尝试过

使用此 question 中的正则表达式作品类型:

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

但是它包含值列表中等号后面的所有文本:

>>> 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')]

也许需要看看后面?

注意:解决方案不必是单个表达式。

最佳答案

您可以使用以下方法获取 key 和包含其所有值的字符串

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

组 1 是键,组 2 是其所有值的组合。 RegExr Example.

Python:

使用该正则表达式,然后将第 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']
}

关于python - 名称值对的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20355826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com