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

Posted

技术标签:

【中文标题】匹配第二个数值的正则表达式【英文标题】:Regexp for match second numeric values 【发布时间】:2018-05-19 21:56:51 【问题描述】:

当前字符串是

   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,@"(\d4|\d3|(..\.\d1,2))").Value;
return c

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

【问题讨论】:

由于数据似乎井井有条,我会说寻找数字的正则表达式是错误的方法。相反,寻找第二个和第三个空格之间的任何内容。 【参考方案1】:

尝试将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

【讨论】:

它不适用于字符串输入 = "ABC 70 10.1-50.2 MG-MCG Paper"; @John 我根据您的新要求更新了我的正则表达式。顺便说一句,一般来说,你不应该像这样改变你的问题,因为你可能会投反对票。 谢谢你。我错过了那个条件。有任何教程可以学习这种类型的正则表达式吗? @John 我喜欢一个网站 (rexegg.com)。除此之外,参与 Stack Overflow 上的正则表达式问题是一种很好的学习方式。我在这里学到了很多关于正则表达式的知识。【参考方案2】:

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

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

    var num = match.Groups[1].Value;

【讨论】:

它不适用于字符串输入 = "ABC 70 10.1-50.2 MG-MCG Paper";【参考方案3】:

其他答案适用于正则表达式,但由于数据排序良好,我会建议其他内容。

我会这样做:

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

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

【讨论】:

以上是关于匹配第二个数值的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 - 匹配第二个逗号(或逗号和空格)之后的所有内容

正则表达式()()12的用法

正则表达式 第三篇:分组匹配

正则表达式匹配字符周围的字符,正则表达式中的AND运算符?

批处理正则表达式怎样替换第二个指定字符

nodepad++中的正则表达式匹配和替换操作。