输入:
blalasdl8ujd "key":"value", blblabla asdw
"alo":"ebobo",blabla"www":"zzzz"
或
blalasdl8ujd key [any_chars_here] "value", blabla asdw
"alo":"ebobo", bla"www":"zzzz"
我正在尝试提取只有 key
并且知道 value
被 覆盖的 value
”
以下正则表达式 key.*"(.*?)"
返回包含 "("zzzz"
) 的最后一个匹配项。
我需要修复它才能先返回。
https://regex101.com/r/CDfhBT/1
代码
See regex in use here
"key"\s*:\s*"([^"]*)"
要匹配转义双引号的可能性,您可以使用以下正则表达式:
See regex in use here
"key"\s*:\s*"((?:(?<!\\)\\(?:\\{2})*"|[^"])*)"
此方法确保奇数个反斜杠 \
在双引号字符 "
之前,这样 \"
, \\\"
、\\\\\"
等都是有效的,但是\\"
、\\\\"
, \\\\\\"
无效(这只会输出反斜杠字符,因此双引号字符 "
前面有偶数个反斜杠只会导致在一个字符串终止)。
匹配两个字符串
如果您也想匹配第二个字符串,您可以使用以下任一正则表达式:
\bkey\b(?:"\s*:\s*|.*?)"([^"]*)"
\bkey\b(?:"\s*:\s*|.*?)"((?:(?<!\\)\\(?:\\{2})*"|[^"])*)"
用法
See code in use here
import re
s = 'blahblah "key":"value","TargetCRS": "Target","TargetCRScode": "vertical Code","zzz": "aaaa" sadzxc "sss"'
r = re.compile(r'''"key"\s*:\s*"([^"]*)"''')
match = r.search(s)
if match:
print match.group(1)
结果
输入
blahblah "key":"value","TargetCRS": "Target","TargetCRScode": "vertical Code","zzz": "aaaa" sadzxc "sss"
blalasdl8ujd key [any_chars_here] "value", blabla asdw "alo":"ebobo", bla"www":"zzzz"
输出
字符串 1
String 2(当使用匹配两个字符串下的方法之一时)
- 匹配:
key [any_chars_here] "value"
- 捕获组 1:
值
解释
"key"
字面匹配
\s*
匹配任意数量的空白字符
:
字面匹配冒号字符
\s*
匹配任意数量的空白字符
"
按字面匹配双引号字符
([^"]*)
捕获集合中不存在的任何字符(除双引号字符 "
之外的任何字符)任意次数到捕获组 1
"
按字面匹配双引号字符
匹配两个字符串
\b
将位置断言为单词边界
key
字面匹配
\b
将位置断言为单词边界
(?:"\s*:\s*|.*?)
匹配以下任意一项
"\s*:\s*
"
字面匹配
\s*
匹配任意数量的空白字符
:
字面匹配
\s*
匹配任意数量的空白字符
.*?
匹配任何字符任意次数,但尽可能少
"
字面匹配
([^"]*)
将除 "
之外的任意数量的任意字符捕获到捕获组 1
"
字面匹配