我试图为.net创建一个正则表达式:
示例=所需结果:
- abc1234abc1 = 1234
- abc12345abc1 =没有结果
- abc123 / 456abc1 = 456
- abc1234 / 1234abc1 =没有结果
模式(?<!\d)\d{1,4}(?!\d)
会产生以下结果:
- abc1234abc1 = 1234(好)
- abc12345abc1 =没有结果(好)
- abc123 / 456abc1 = 123,456,1(坏)
- abc1234 / 5678abc1 = 1234,5678,1(差)
此模式\/?[\d]{1,3}
产生以下结果:
- abc123 / 456abc1 = / 456(应该只是456)
- abc1234 / 5678abc1 = / 567(应该没有结果)
我尝试在上面的模式周围放置一些看法,因此/ 5678没有返回值,但是当我这样做时,我根本没有得到任何值。
我的问题是我需要两个单独的表达式,还是可以在一个表达式中完成?一个是首选,但我不知道如何合并它们。谢谢!!
答案 0 :(得分:1)
您可以使用
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 demo
正则表达式有两种选择:
(?<![\d/])(?<num>\d{1,4})(?![\d/])
(匹配1-4个数字子串,不在/
或数字之前或之后)/(?<num>\d{1,3})(?!\d)
(匹配前面带有/
的1-3位数字后缀,后面没有数字。您需要的值在一个命名组&#34; num&#34;。