我正试图为.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"中。