繁体   English   中英

匹配单词,正则表达式问题

[英]Matching anything but the word, regex issue

给定这个凌乱的字符串:

66,"Hi":"11.00","sth":"187,"Hi":"13.00"[5]"53","target":{"sth2"

我想匹配13.00sth2 (我需要忽略Hi11.00 )。

我的正则表达式"Hi":"(.{0,5})".+"target":{"(.*)"无法做到,因为它与Hi的最左值相匹配,此处为: 11.00

我正在寻找一种解决方案,以防止Hi本身和单词target之间存在Hi单词。

尝试将正则表达式更改为以下内容:

"Hi":"(.{0,5})"(?:(?!"Hi").)+"target":{"(.*)"

唯一的区别是将.+更改为(?:(?!"Hi").)+ (?!"Hi")是否定的超前查询,如果下一个字符为"Hi" ,则将失败,因此请将其放在.之前. 在重复中,它将确保没有出现匹配的字符串作为.+的一部分。

例:

>>> regex = re.compile(r'"Hi":"(.{0,5})"(?:(?!"Hi").)+"target":{"(.*)"')
>>> text = '66,"Hi":"11.00","sth":"187,"Hi":"13.00"[5]"53","target":{"sth2"'
>>> regex.search(text).groups()
('13.00', 'sth2')

这是将这种类型的要求添加到正则表达式中的一种很好的通用方法,但是在您的情况下,您也可以在当前正则表达式的开头放置.* 这将在字符串的开头贪婪地匹配尽可能多的字符,因此您将匹配最右边出现的"Hi"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM