Python用正则提取双引号之间的文本出现空结果如何解决
问题原因
你遇到的部分行匹配为空的问题,大概率是以下两种情况之一:
- 匹配失败的行里的双引号是全角双引号(
“”),不是你正则里写的半角双引号("),肉眼看起来接近但实际字符编码不同,导致匹配失效。 - 匹配失败的行里存在不可见控制字符(比如零宽空格、换行转义符),惰性匹配
(.+?)遇到特殊字符时会出现匹配中断的情况。
解决方案
优先用排除字符组替换惰性匹配写法,匹配效率和稳定性都更高,示例代码如下:
import re # 方案1:仅匹配半角双引号包裹的内容,适配整文件读取场景 with open("目标文件路径", "r", encoding="utf-8") as f: file_content = f.read() titles = re.findall(r'"([^"]+)"', file_content) print(titles) # 无异常时输出:['abc', 'ABC. XYZ', '1 - 2 - 3'] # 方案2:同时兼容全角/半角双引号,适配逐行读取、存在首尾空白的场景 titles = [] with open("目标文件路径", "r", encoding="utf-8") as f: for line in f: # 先去掉行首尾的空白、换行符 clean_line = line.strip() match_res = re.findall(r'["“]([^"”]+)["”]', clean_line) if match_res: titles.extend(match_res) print(titles)
如果按上面的写法还是有匹配失败的情况,你可以打印对应行的字符编码确认是否存在其他特殊符号:
# 打印第二行每个字符的编码 print([ord(c) for c in 第二行字符串]) # 半角双引号的ASCII码是34,如果对应位置的编码不是34,替换正则里的匹配规则即可
内容的提问来源于stack exchange,提问作者Zqdiac Thanks
相关产品推荐
相关产品推荐

