我有一个这样的字符串
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解析器直接解析,而必须作为字符串逐行读取。因此,我最初以为每个(相对容易)单个字符串都只需要使用字符串和正则表达式即可。但是我显然是错的。 XML解析器是必经之路。
答案 0 :(得分:0)
re.findall(r'((?!\<).*?)="(.*?)"', s)
产生:
[('stkcode', '10001909'),
(' marketid', 'sh'),
(' isstop', 'S 01'),
(' turnover', '0'),
(' contractid', '000000'),
(' time', '84445850')]
正则表达式说明:
(...)="(...)"
匹配此格式的所有内容,即您定义的kwarg格式
现在第一组:
((?!\<).*?)
将匹配除前括号(.*?
)以外的所有字符((?!\<)
)
第二组:
(.*?)
只会匹配所有字符。右括号位于原始匹配模式的引号之外,因此您不必担心。
编辑:
要忽略字符周围的空格,请添加此反向匹配组
(?!\s)
不确定空格在您的字符串中会出现在哪里,但是这个新的正则表达式会在每个相关位置处理它:
((?!\<)(?!\s).*?(?!\s))="(?!\s)(.*?)(?!\s)