从以下查询中获取gs的值。
(2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | gs = accountinga sdf * | gs = tax * | 12 | ic ='38')
我尝试过以下模式
(小于?= GS =)(。*)([|])
但结果 gs =会计asdf * | gs = tax * | 12 |
所需的输出应为:会计asdf *,tax *
可能会改变模式吗?
答案 0 :(得分:3)
此正则表达式将根据您的需要进行匹配。
(?<=gs=)([^|)]*)
它还将处理gs是最后一个子句而不包括组中的右括号的情况。
答案 1 :(得分:1)
我建议使用2个解决方案,请参阅their online demo。
一个是基于正则表达式的:
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}以外的零个或多个字符进入第1组,稍后您将使用|
收集。请参阅regex demo。
或者基于非正则表达式,只需与Select
分开,检查项目是否以|
开头,然后与gs=
分开以获取最后一部分:
=