[英]Matching anything but the word, regex issue
给定这个凌乱的字符串:
66,"Hi":"11.00","sth":"187,"Hi":"13.00"[5]"53","target":{"sth2"
我想匹配13.00
和sth2
(我需要忽略Hi
值11.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.