无法获取捕获的组值

时间:2016-07-18 22:35:37

标签: c# regex

这就是我的输入的样子:

"A1-BC-12345-D2"

这就是我的正则表达式的样子。它需要在最后一个之间 - 和之前的一个:

"([^-]+)(?=-[^-]+-?$)"

我正在尝试在没有循环的变量中捕获12345:

这就是我的代码的样子:

string output = Regex.Replace("A1-BC-12345-D2", @"([^-]+)(?=-[^-]+-?$)", "$1");

输出与输入相同。

我已经在regex101.com上验证了正则表达式,它正在捕获正确的值。

如何使用捕获组在输出中获得12345?

修改

我无法使用Match或循环播放,因为我尝试在AD FS声明规则中使用此规则,该规则仅支持Replace

1 个答案:

答案 0 :(得分:2)

如果您只能使用替换,那么您应该修改正则表达式,以便它选择您不想要的所有内容,然后在捕获组中放置要做的事情。然后使用替换字符串来保持捕获组的完整性(就像您一样)。

^.*?([^-]+)-[^-]+-?$

Regex101 Demo

string output = Regex.Replace("A1-BC-12345-D2", @"^.*?([^-]+)-[^-]+-?$", "$1");