在单个正则表达式中仅选择选择的数字部分

时间:2014-07-14 14:43:11

标签: c# regex

好吧,我不知道如何解释,但我有这样的文字:

abc=0;def=2;abc=1;ghi=4;jkl=2

我想要做的是选择abc=0abc=1但不包括abc部分......

我的正则表达式是:abc=\d+,但它包含abc部分...

我对此问题something,答案是这样的:(?!abc=)\d+但它选择了文本中的所有数字......

那么,有人可以帮助我吗?

提前致谢。

2 个答案:

答案 0 :(得分:3)

如果您的语言支持\K,那么您可以使用以下正则表达式来匹配字符串abc=之后的数字,

abc=\K\d+

DEMO

OR

如果您的语言不支持\K

使用积极的后视,

(?<=abc=)\d+

DEMO

C#代码将是,

{
string str = "abc=0;def=2;abc=1;ghi=4;jkl=2";
Regex rgx = new Regex(@"(?<=abc=)\d+");
 foreach (Match m in rgx.Matches(str))
Console.WriteLine(m.Value);
}

IDEONE

<强>解释

  • (?<=abc=)正面的后视,实际上将匹配标记设置在字符串abc=之后。
  • \d+匹配一个或多个数字。

答案 1 :(得分:2)

这里你不需要lookaround断言。您只需使用capturing group捕获所需的匹配上下文,然后使用匹配Groups属性返回匹配的组。

abc=(\d+)

示例

string s = "abc=0;def=2;abc=1;ghi=4;jkl=2";
foreach (Match m in Regex.Matches(s, @"abc=(\d+)"))
         Console.WriteLine(m.Groups[1].Value);

<强>输出

0
1