按分隔符匹配正则表达式模式

本文关键字:正则表达式 模式 分隔符 | 更新日期: 2023-09-27 18:11:44

从下面的查询中获取gs的值。

(2 | 3 | 4 | 5 | 6 | | 7 8 9 10 | | | 11 | g = accountinga自卫队税收* * | g = | | ic ="38"12日)

我试过下面的模式

(& lt; = gs =)(.*)([|])

但是结果gs=accounting asdf* |gs=tax*|12|

期望输出应该是:accounting asdf*,tax*

按分隔符匹配正则表达式模式

这个正则表达式将匹配你想要的。

(?<=gs=)([^|)]*)

它还将处理gs是最后一个子句而不包括组中的右括号的情况。

我建议两个解决方案,参见他们的在线演示。

一个是基于正则表达式的:

var x = "(2|3|4|5|6|7|8|9|10|11|gs=accountinga sdf* |gs=tax*|12|ic='38')";
var result = Regex.Matches(x, @"(?:^|'|)gs=([^|]*)")
    .Cast<Match>()
    .Select(p => p.Groups[1].Value)
    .ToList();
foreach (var s in result)
    Console.WriteLine(s);

注意,(?:^|'|)gs=([^|]*)模式只匹配字符串开头或|之后的gs=,然后([^|]*)将捕获|以外的零个或多个字符到组1中,您将在稍后使用Select收集这些字符。参见regex演示。

或基于非正则表达式的,仅与|分割,检查项目是否以gs=开始,然后与=分割以获得最后一部分:

var res2 = x.Split('|')
        .Where(p => p.StartsWith("gs="))
        .Select(n => n.Split('=').LastOrDefault())
        .ToList();
    foreach (var t in res2)
        Console.WriteLine(t);