You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python正则表达式提取含单引号的单引号内文本?

解决含未转义单引号的类JSON文本提取问题

核心问题分析

你遇到的问题根源是文本中的内部单引号未转义,导致按, 拆分和简单正则[^']+都会提前终止匹配。这类文本属于不规范的类Python字典格式,而非标准JSON(标准JSON用双引号),所以直接用JSON解析器会失败,但可以通过修复格式或调整正则来解决。

方案一:修复格式后用安全解析工具(推荐)

这种方法比正则更可靠,利用Python的ast.literal_eval安全解析修复后的类字典字符串:

import re
import ast

# 原始待处理文本
raw_str = "{'pro_id':'1692423', 'pro_model':'SKUF42051', 'pro_category':'accessories', 'pro_name':'Gants tactiques Escalade en plein air Gants antidérapants résistants à l'usure Formation Gants de moto d'équitation', 'pro_current_price':'27.99', 'pro_raw_price':'27.99', 'pro_discount':'36', 'pro_likes_count':'11'}"

# 第一步:修复内部未转义的单引号(替换非边界的单引号为转义单引号)
fixed_str = re.sub(r"(?<=[^'])'(?=[^'])", r"\'", raw_str)

# 第二步:用ast.literal_eval解析为字典(比eval安全,不会执行恶意代码)
data = ast.literal_eval(fixed_str)

# 直接获取目标字段
print(data['pro_name'])
# 输出:Gants tactiques Escalade en plein air Gants antidérapants résistants à l'usure Formation Gants de moto d'équitation

原理说明

  • re.sub(r"(?<=[^'])'(?=[^'])", r"\'", raw_str):用正则匹配不在引号首尾的单引号(即被普通字符包裹的单引号),替换为转义单引号\',让文本符合Python字典的语法规范。
  • ast.literal_eval:专门用于解析Python字面量(如字典、列表、字符串等),不会执行任意代码,比eval更安全。

方案二:调整正则表达式匹配键值对

如果必须用正则,可通过正向预查确保值的匹配范围正确,不被内部单引号打断:

import re

raw_str = "{'pro_id':'1692423', 'pro_model':'SKUF42051', 'pro_category':'accessories', 'pro_name':'Gants tactiques Escalade en plein air Gants antidérapants résistants à l'usure Formation Gants de moto d'équitation', 'pro_current_price':'27.99', 'pro_raw_price':'27.99', 'pro_discount':'36', 'pro_likes_count':'11'}"

# 匹配键值对的正则:匹配'键':'值',值的结束位置为', 或'}$
pattern = r"'([^']+)':'(.*?)(?=(?:',|'}$))'"

# 查找所有匹配项并转为字典
matches = re.findall(pattern, raw_str, re.DOTALL)
data = dict(matches)

print(data['pro_name'])

正则解释

  • '([^']+)':匹配键(被单引号包裹,内部无单引号)。
  • '(.*?)(?=(?:',|'}$))':匹配值,.*?非贪婪匹配任意字符,(?=(?:',|'}$))是正向预查,确保匹配到下一个, 前的单引号,或文本末尾的'},避免提前终止。
  • re.DOTALL:让.匹配换行符(如果文本有换行的话)。

总结

优先选择方案一,因为正则匹配对文本格式的一致性要求极高,一旦格式有微小变化(如空格、换行)就会失效;而ast.literal_eval在修复格式后能稳定解析结构,后续操作更便捷。

内容的提问来源于stack exchange,提问作者Edwin Jose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 06:15:01