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

如何用Python的re.findall提取引号内字符串并排除数字后的引号?

解决引号内字符串提取时忽略数字后引号的问题

问题分析

原正则表达式 "([^"]*)" 会把数字后跟的引号(比如表示英寸的 7")误判为引号对的结束符,导致后续内容提取出错。需要调整正则规则,让数字后的引号被当作内容的一部分,而非引号对的结束标记。

解决方案

使用包含「数字+引号」可选匹配模式的正则表达式,精准提取引号内的内容:

import re

string = 'Res: Ext="" Tl=" PLIERS, 7"" Ma="337" Ml="4" Ms="A" N="" Mfpn="" M="PRCH" loc=""'

# 修改后的正则
result = re.findall(r'"((?:[^"]|\d")*)"', string)
print(result)
# 输出: ['', ' PLIERS, 7"', '337', '4', 'A', '', '', 'PRCH', '']

正则规则说明

  • ": 匹配引号对的起始双引号
  • (?:[^"]|\d")*: 非捕获组,支持两种匹配场景的任意重复:
    • [^"]: 匹配任意非引号的普通字符
    • d": 匹配「数字紧跟双引号」的组合(对应英寸标识场景)
  • ": 匹配引号对的结束双引号(此引号前不会是数字,因为数字+引号的情况已被前面的组匹配)

DataFrame批量处理示例

如果要在DataFrame的列中批量执行提取操作,可以用str.findall方法:

import pandas as pd

df = pd.DataFrame({'text': [string]})
df['extracted_content'] = df['text'].str.findall(r'"((?:[^"]|\d")*)"')
print(df['extracted_content'].tolist())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:48:08