【问题标题】: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,@"(\d{4}|\d{3}|(..\.\d{1,2}))").Value;
return c

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

【问题讨论】:

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

标签: c# sql regex


【解决方案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] 将包含您想要的内容。

【讨论】:

    猜你喜欢
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 2019-03-13
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多