.net正则表达式-需要帮助合并';两个';表达

.net正则表达式-需要帮助合并';两个';表达,.net,regex,string,.net,Regex,String,我正在尝试为.net创建一个正则表达式,它将: A.)从混合字符值中提取1到4位数字 B.)如果紧跟在正斜杠“/”之后,则提取1到3位数字 示例=所需结果: abc1234abc1=1234 abc12345abc1=无结果 abc123/456abc1=456 abc1234/1234abc1=无结果 模式(?产生以下结果: abc1234abc1=1234(良好) abc12345abc1=无结果(良好) abc123/456abc1=123456,1(坏) abc1234/567

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

  • A.)从混合字符值中提取1到4位数字
  • B.)如果紧跟在正斜杠“/”之后,则提取1到3位数字
示例=所需结果:

  • abc1234abc1=1234
  • abc12345abc1=无结果
  • abc123/456abc1=456
  • abc1234/1234abc1=无结果
模式
(?产生以下结果:

  • abc1234abc1=1234(良好)
  • abc12345abc1=无结果(良好)
  • abc123/456abc1=123456,1(坏)
  • abc1234/5678abc1=12345678,1(坏)
此模式
\/?[\d]{1,3}
导致以下结果:

  • abc123/456abc1=/456(应该是456)
  • abc1234/5678abc1=/567(如果重新返回没有结果)
我试着在上面的模式周围放置lookarounds,这样/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);
}
var lines=newstring[]{“abc1234abc”、“abc12345abc”、“abc123/456abc”、“abc1234/1234abc”};
foreach(行中的字符串s)
{
var matches=Regex.matches(s,@“(?\d{1,4})(?![\d/]))/(?\d{1,3})(?!\d)”;
foreach(匹配中的匹配m)
Console.WriteLine(m.Groups[“num”].Value);
}

正则表达式有两种选择:

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

您需要的值位于命名组“num”中。

是字符串的
1
部分吗?请参阅。如果您指的是abc123/456abc“1”末尾的1,不,我只是把它放在那里作为“混合字符值”的一部分。你提供的演示看起来很棒,唯一的问题是结果不应该包括/而应该是斜杠后面的值(即456而不是/456)。结果不是
匹配.value
,而是
匹配.Groups[“num”].Value
。请参阅。请让我知道正则表达式是否适合您。是的,我认为它会起作用。非常感谢!