匹配第二个数值的正则表达式
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]
将包含您想要的内容。
【讨论】:
以上是关于匹配第二个数值的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章