如何用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
相关产品推荐
相关产品推荐

