按分隔符匹配正则表达式模式
本文关键字:正则表达式 模式 分隔符 | 更新日期: 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);