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

如何使用C#正则表达式提取字符串中“|”符号之后的内容?

正则表达式提取|符号后内容的正确写法

现有写法失效原因

  • 第一种写法@"*|(\S)":
    • *是量词,不能直接放在正则开头作为匹配前缀
    • |是正则特殊字符,代表「或」逻辑,匹配字面量|必须转义为\|
    • 仅匹配单个非空白字符\S,无法拿到完整的两个目标字符串
  • 第二种写法@"(?<=\|)(.*?)":
    • 非贪婪匹配.*?没有后续匹配边界,会优先匹配最短的0长度字符,因此拿不到有效内容

正确实现方案

方案1:直接匹配提取string2和string3

直接通过分组捕获两个目标值,无需后续二次处理:
正则写法:@"(?<=\|)\s*\(\s*(\S+)\s+(\S+)\s*\)"
说明:

  • (?<=\|):正向回顾后断言,确保匹配位置在|之后
  • \s*:匹配|之后可能存在的任意空白字符
  • \(:匹配左括号
  • (\S+):第一个捕获组,匹配string2(连续非空白字符)
  • \s+:匹配两个字符串之间的空白
  • (\S+):第二个捕获组,匹配string3
  • \s*\):匹配右括号及之前可能的空白

C#使用示例:

string input = "(String1) | (string2 string3)";
Regex regex = new Regex(@"(?<=\|)\s*\(\s*(\S+)\s+(\S+)\s*\)");
Match match = regex.Match(input);
if (match.Success)
{
    string string2 = match.Groups[1].Value;
    string string3 = match.Groups[2].Value;
}

方案2:先提取|后的完整内容再拆分

如果需要更灵活的后续处理,可以先拿到|之后的所有内容:
正则写法:@"(?<=\|).*"
匹配结果为 (string2 string3),后续自行去除括号、拆分空白即可拿到两个目标值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:54:07