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

时间:2016-10-06 12:18:47

标签: c# regex

从以下查询中获取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 *

可能会改变模式吗?

2 个答案:

答案 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=分开以获取最后一部分:

=