匹配除了单词之外的任何东西,正则表达式问题

nut*_*hip 1 python regex python-2.7

鉴于这个凌乱的字符串:

66,"Hi":"11.00","sth":"187,"Hi":"13.00"[5]"53","target":{"sth2"
Run Code Online (Sandbox Code Playgroud)

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

我的正则表达式"Hi":"(.{0,5})".+"target":{"(.*)"不能这样做,因为它匹配最左边的值Hi,这里:11.00

我正在寻找一种解决方案,它不允许HiHi它自己和这个词之间存在单词target.

And*_*ark 5

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

"Hi":"(.{0,5})"(?:(?!"Hi").)+"target":{"(.*)"
Run Code Online (Sandbox Code Playgroud)

这里唯一的区别是.+改为(?:(?!"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')
Run Code Online (Sandbox Code Playgroud)

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