.net 正则表达式 - 需要帮助合并'two'表达式



我正试图为.net创建一个正则表达式,它将:

  • A.)从混合字符值中提取1到4位数字
  • B.)在正斜杠'/'之后立即提取一个1-3位数字IF

示例=所需结果:

  • abc1234abc1=1234
  • abc12345abc1=没有结果
  • abc123/456 abc1=456
  • abc1234/1234abc1=无结果

模式(?<!d)d{1,4}(?!d)产生以下结果:

  • abc1234abc1=1234(良好)
  • abc12345abc1=无结果(良好)
  • abc123/456abc1=123456,1(坏)
  • abc1234/5678abc1=12345678,1(坏)

这种模式/?[d]{1,3}产生以下结果:

  • abc123/456abc1=/456(应该只是456)
  • abc1234/5678abc1=/567(应无结果返回)

我试着在上面的模式周围进行查找,所以/5678没有返回任何值,但无论如何,当我这样做时,我根本没有得到任何值。

我的问题是,我需要两个单独的表达式,还是可以在一个表达式中完成?最好是一个,但我不知道如何合并它们。。谢谢

您可以使用

var lines = new string[] {"abc1234abc", "abc12345abc", "abc123/456abc", "abc1234/1234abc"};
foreach (string s in lines) 
{
   var matches = Regex.Matches(s, @"(?<![d/])(?<num>d{1,4})(?![d/])|/(?<num>d{1,3})(?!d)");
   foreach (Match m in matches)
        Console.WriteLine(m.Groups["num"].Value);
}

查看IDEONE演示

正则表达式有两个备选方案:

  • (?<![d/])(?<num>d{1,4})(?![d/])(匹配1-4位不带/或数字的子字符串)
  • /(?<num>d{1,3})(?!d)(匹配前面有/但后面没有数字的1-3位子字符串

您需要的值在一个命名组"num"中。

最新更新