使用regex捕获“关键字参数”

2024-06-12 10:50:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样格式的字符串

s="""
stkcode="10001909" marketid="sh" isstop="S 01" turnover="0" contractid="000000" time="84445850"
"""

我想捕获其中的所有“关键字args”子字符串,即stkcode="10001909"isstop="S 01"。请注意,普通的s.split()不起作用,因为某些字段值中可能有空格,例如isstop="S 01"。正确的方法似乎是re.split,但我不知道如何编写适当的正则表达式。有人能帮忙吗?谢谢

编辑 添加更多信息:我们保证每个条目值中没有"实际上,我们只需要“保护性”分割,即只分割配对"之外的空白。

编辑:XML才是方向,而不是正则表达式。道歉

我的原始数据包含许多行Timestamp + some aux info + an XML string。因此它不能被XML解析器直接解析,必须作为字符串逐行读取。所以我最初认为只要坚持使用string和regex作为每个(相对简单的)字符串。但我显然错了。而XML解析器无疑是一种可行的方法


Tags: 方法字符串解析器编辑stringtime格式sh
1条回答
网友
1楼 · 发布于 2024-06-12 10:50:30
re.findall(r'((?!\<).*?)="(.*?)"', s)

产生:

[('stkcode', '10001909'),
(' marketid', 'sh'),
(' isstop', 'S 01'),
(' turnover', '0'),
(' contractid', '000000'),
(' time', '84445850')]

正则表达式解释:

(...)="(...)" 匹配此格式中的所有内容,即您定义的kwarg格式

第一组: ((?!\<).*?)将匹配除前括号((?!\<))之外的所有字符(.*?

第二组: (.*?) 将只匹配所有字符。右括号在原始匹配模式的引号之外,所以您不必担心它

编辑:

若要忽略字符周围的空白,请添加此反向匹配组 (?!\s) 不确定空格会出现在字符串中的什么位置,但是这个新的正则表达式会在每个相关的地方处理它:

((?!\<)(?!\s).*?(?!\s))="(?!\s)(.*?)(?!\s)

相关问题 更多 >