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

Python使用re.split按多分隔符拆分字符串时忽略引号内管道符

解决方法

你的问题出在原正则没区分引号内外的分隔符,导致引号里的|也被拆分了。可以用两种方式实现需求:

方法一:用re.findall提取目标内容(更直观)

直接匹配所有需要保留的部分——要么是双引号包裹的内容(包含里面的|),要么是引号外的普通内容,最后再去掉多余的引号:

import re
text = r'ced\"|\"ms|n\"|4|98'
# 匹配双引号包裹的内容,或引号外不含|的内容
matches = re.findall(r'(?:"[^"\\]*(?:\\.[^"\\]*)*"|[^"|]+)', text)
# 去掉内容两端的双引号
finallist = [item.strip('"') if item.startswith('"') else item for item in matches]
print(finallist)  # 输出: ['ced', 'ms|n', '4', '98']

方法二:修正re.split的正则

构造正则,只匹配不在双引号内部的目标分隔符("|"、引号后紧跟的|、引号前的|),拆分后过滤空字符串:

import re
text = r'ced\"|\"ms|n\"|4|98'
# 匹配三种合法分隔符,且确保不在引号内
finallist = [x for x in re.split(r'(?:\"\|\"|\|(?=")|(?<!")\|)', text) if x]
print(finallist)  # 输出: ['ced', 'ms|n', '4', '98']

正则说明:

  • \"\|\":匹配分隔符"|"
  • \|(?="):匹配后面紧跟双引号的|(比如ms|n"前的|不算,因为它后面是n不是")
  • (?<!")\|:匹配前面没有双引号的|(比如4|98中的|)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:45:32