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

如何按|分隔字符串且不拆分单/双引号内部的|字符

解决方案

你可以通过匹配目标字段而非直接分割分隔符的方式实现需求,该方案适配单/双引号内特殊字符不拆分的场景,逻辑更稳定。

核心正则表达式

(?<=\||^)\s*(?:"[^"]*"|'[^']*'|[^|]+?)\s*(?=\||$)

正则逻辑说明

  • (?<=\||^):正向回顾匹配字段起始位置,要么是字符串开头,要么是|的后方
  • \s*:匹配字段前后可能存在的冗余空格
  • 分支匹配逻辑:
    • "[^"]*":匹配双引号包裹的所有内容,内部的|会被整体保留
    • '[^']*':匹配单引号包裹的所有内容
    • [^|]+?:匹配未被引号包裹的普通字段,直到遇到下一个|为止
  • (?=\||$):正向前瞻匹配字段结束位置,要么是字符串结尾,要么是下一个|的前方

代码示例

JavaScript 示例

const str = "aa | bb | \"cc | dd\" | 'ee | ff'";
const regex = /(?<=\||^)\s*(?:"[^"]*"|'[^']*'|[^|]+?)\s*(?=\||$)/g;
const result = str.match(regex);
console.log(result); // 输出:['aa', 'bb', '"cc | dd"', "'ee | ff'"]

Python 示例

import re

raw_str = "aa | bb | \"cc | dd\" | 'ee | ff'"
regex = r'(?<=\||^)\s*(?:"[^"]*"|\'[^\']*\'|[^|]+?)\s*(?=\||$)'
result = re.findall(regex, raw_str)
print(result) # 输出:['aa', 'bb', '"cc | dd"', "'ee | ff'"]

扩展兼容方案

如果你的场景需要支持引号内的转义引号(比如"cc \"test\" | dd"这类格式),只需把正则内的"[^"]*"替换为"[^"\\]*(?:\\.[^"\\]*)*",单引号分支同理替换即可兼容转义场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:45:03