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

Python正则表达式无法正确分割字符串问题求助

解决方案

你可以替换原正则模式为以下表达式,它会正确识别不在双引号内的竖线(包括被引号包裹的"|"作为分隔符的情况),同时忽略引号内的所有竖线与转义字符:

import re

pattern = r'(?=(?:[^"\\]*(?:\\.[^"\\]*)*")*[^"\\]*$)"?\|"?'

测试验证

  1. 针对问题输入text = r'2|dgx|abc|3':
text = r'2|dgx|abc|3'
print(re.split(pattern, text))
# => ['2', 'dgx', 'abc', '3']

符合预期,所有外部竖线都被正确分割。

  1. 针对原正确案例text = r'ced"|"ms|n"|4|98':
text = r'ced"|"ms|n"|4|98'
print(re.split(pattern, text))
# => ['ced', 'ms|n"', '4', '98']

如果需要去除字段首尾的引号,可在分割后额外处理:

result = [field.strip('"') for field in re.split(pattern, text)]
print(result)
# => ['ced', 'ms|n', '4', '98']
  1. 针对含转义字符的案例text = r'ced"|"ms\\|n"|4|98':
text = r'ced"|"ms\\|n"|4|98'
result = [field.strip('"') for field in re.split(pattern, text)]
print(result)
# => ['ced', 'ms\\\\|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 15:30:51