python - 正则表达式在引号内的键后查找字符串

标签 python regex

<分区>

输入:

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

  • 匹配:"key":"value"
  • 捕获组 1:

String 2(当使用匹配两个字符串下的方法之一时)

  • 匹配:key [any_chars_here] "value"
  • 捕获组 1:

解释

  • "key" 字面匹配
  • \s* 匹配任意数量的空白字符
  • :字面匹配冒号字符
  • \s* 匹配任意数量的空白字符
  • " 按字面匹配双引号字符
  • ([^"]*) 捕获集合中不存在的任何字符(除双引号字符 " 之外的任何字符)任意次数到捕获组 1
  • " 按字面匹配双引号字符

匹配两个字符串

  • \b 将位置断言为单词边界
  • key 字面匹配
  • \b 将位置断言为单词边界
  • (?:"\s*:\s*|.*?) 匹配以下任意一项
    • "\s*:\s*
      • " 字面匹配
      • \s* 匹配任意数量的空白字符
      • :字面匹配
      • \s* 匹配任意数量的空白字符
    • .*? 匹配任何字符任意次数,但尽可能少
  • " 字面匹配
  • ([^"]*) 将除 " 之外的任意数量的任意字符捕获到捕获组 1
  • " 字面匹配

关于python - 正则表达式在引号内的键后查找字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47719580/

相关文章:

java - 在特定索引的文本中嵌入单词

python - 卸载 Easy_Install

python - 为 python 文件设置一致的主目录

python - numpy 中的按列减法

java - 黑客排名java字符串正则表达式用户名

regex - 如何使用 htaccess 仅在 url 路径上显示 id 值?

python - 将高度、宽度、 channel 数维度的图像转换为 n_masks、image_height、image_width

python - 如何在 Seaborn 中叠加两个图表?

javascript - Jquery 中使用正则表达式的浮点范围

python - 正则表达式在 Python 3 中将文本与分隔符匹配