.net正则表达式-需要帮助合并';两个';表达
我正在尝试为.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
- 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
。请参阅。请让我知道正则表达式是否适合您。是的,我认为它会起作用。非常感谢!