You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用正则表达式提取JSON中description字段的完整值?

解决JSON格式异常的description字段提取问题

嘿,我明白你遇到的麻烦了——JSON格式有问题没法用库解析,想用正则提取完整的description值,但之前的正则没起作用对吧?

先说说你原来的正则为什么只返回['description']description(?:\w+){0,23}这个表达式里,(?:\w+)是匹配字母、数字或下划线,但你的字段名后面跟着的是":这些非\w的字符,所以这部分根本匹配不到,自然就只捕获了字段名本身。

要提取description对应的完整值,我们需要针对性地写正则,考虑到值里可能包含换行(比如你的例子里有\n),可以试试下面的方案:

基础解决方案(处理包含换行的普通内容)

import re
# 调整字符串写法更清晰,保留原内容的转义和换行
description_input = r"'description\" : \"this is a test \n another test\" "
# 正则表达式:匹配字段名、冒号、引号,捕获引号内所有内容(包括换行)
matches = re.findall(r'description\s*:\s*"([\s\S]+?)"', description_input, re.IGNORECASE)

if matches:
    full_desc = matches[0]
    print("提取到的完整description:")
    print(full_desc)

正则解释:

  • description:匹配目标字段名,re.IGNORECASE确保不区分大小写
  • \s*:匹配字段名与冒号、冒号与引号之间的任意空白字符(允许无空白)
  • ":匹配值的开头引号
  • ([\s\S]+?)核心捕获组[\s\S]匹配任意字符(包括换行符\n),+?是非贪婪模式,确保只匹配到最近的结尾引号,避免过度匹配
  • ":匹配值的结尾引号

运行这段代码后,你会得到完整的内容:

this is a test 
 another test

进阶:处理包含转义引号的内容

如果你的description值里有转义的引号(比如"this is a \"sample\" text"),上面的正则会提前终止匹配,这时候可以用更健壮的正则:

import re
description_input = r"'description\" : \"this is a \"test\" with quotes\n another line\" "
matches = re.findall(r'description\s*:\s*"((?:\\.|[^"])+)"', description_input, re.IGNORECASE)

if matches:
    full_desc = matches[0].replace('\\"', '"')  # 还原转义的引号
    print(full_desc)

这个正则里的(?:\\.|[^"])+表示:要么匹配转义字符(比如\"),要么匹配非引号的普通字符,这样就能正确处理带转义引号的内容了。

内容的提问来源于stack exchange,提问作者blue-sky

火山引擎 最新活动