正则表达式匹配第二个数值

时间:2017-12-06 05:08:07

标签: c# sql regex

当前字符串

   ABC 70 1 MG-MCG Paper
   ABC 70 10 MCG Paper
   ABC 70 150 MG-MCG Paper
   ABC 70 1.50 MG-MCG Paper
   ABC 70 10.50 MG-MCG Paper
   ABC 70 10-50 MG-MCG Paper

   ABC 705 1 MG-MCG Paper
   ABC 705 10 MCG Paper
   ABC 705 150 MG-MCG Paper
   ABC 705 1.50 MG-MCG Paper
   ABC 705 10.50 MG-MCG Paper
   ABC 705 10-50 MG Paper

预期产出:

1  
 10  
 150  
 1.50  
 10.50  
 10-50  
 1  
 10  
 150  
 1.50  
 10.50  
 10-50

Treid Exp -

string c=Regex.Match(result,@"(\d{4}|\d{3}|(..\.\d{1,2}))").Value;
return c

如何选择第二个数值和MG或MCG值之前

3 个答案:

答案 0 :(得分:0)

以下正则表达式提供您想要的输出:

var match = Regex.Match(result, @"\d+\s+(\d+(?:[.-]\d+)?)");
if (match.Success)
{
    var num = match.Groups[1].Value;
}

答案 1 :(得分:0)

尝试使用以下模式的Regex.Match

(\d+(?:[.-]\d+)?) MG-MCG

这匹配数字,可选为由连字符分隔的十进制或两个部分编号,紧跟在字符串MG-MCG之前。

string input = " ABC 70 10.1-50.2 MG-MCG Paper";
Match match = Regex.Match(input, @"(\d+(?:\.\d+)?(?:[.-]\d+(?:\.\d+)?)?) MG-MCG");
if (match.Success)
{
    string key = match.Groups[1].Value;
    Console.WriteLine(key);
}

Demo

答案 2 :(得分:0)

其他答案用于正则表达式,但由于数据排序很好,我会建议别的。

我会这样做:

string input="ABC 70 10-50 MG-MCG Paper";
string[] fields = input.split(new string[] { " " } , 
     StringSplitOptions.RemoveEmptyEntries);

然后field[2]将包含您想要的内容。