使用正则表达式从字符串中获取子字符串

3

如何从以下格式的字符串中获取四个数字:

一些文本 1 个数字 (10/ 100) 其他一些文本... 从 -10°C 到 50°C

其他一些文本 2 个数字 (10/ 100) 其他一些文本... 从 -11°C 到 -2°C

其他一些文本 -30 个数字 (100/ 1001) 其他一些文本... 从 2°C 到 12°C

前两个数字在括号内,由斜杠分隔。斜杠后面没有空格,我必须添加它才能使数字加粗。两个数字均为正整数。

第三个数字始终位于“From ”和第一个“°C”之间。

第四个数字始终位于“°C to ”和最后一个“°C”之后。

字符串中没有其他括号,只有一个“From ”单词。

我正在使用 C#和 .NET 3.5。

1个回答

3
这将有效:

^.*\( *(\d+) */ *(\d+) *\)\D*?From +(-?\d+)°C +to +(-?\d+)°C$

它只是从文本字符串中读取4个数字(前两个始终为正数,后两个为正数或负数) - 它寻找第一个数字的括号,并检查最后两个数字与“From”和“to”的关系

var pattern = @"^.*\( *(\d+) */ *(\d+) *\)\D*?From +(-?\d+)°C +to +(-?\d+)°C$";

var result = Regex.Match("Some other text with 2 numbers (10/ 100) some other text... From -11°C to -2°C", pattern);

var num1 = int.Parse(result.Groups[1].Value);
var num2 = int.Parse(result.Groups[2].Value);
var num3 = int.Parse(result.Groups[3].Value);
var num4 = int.Parse(result.Groups[4].Value);

第一和第二个数字始终为正数,而第三和第四个数字可以是负数或正数。我可以使用您的解决方案,因为字符串中只有这四个数字 :) - sventevit
好的,没问题。我可以在括号等方面更加严格。 - Lasse Espeholt
我的错,第一个括号之前也可以有数字,所以这不是完全正确的解决方案...已编辑第一篇帖子。 - sventevit
好的,我现在已经编辑了帖子(全部),它可以与你的示例一起使用。 - Lasse Espeholt
我又进行了修改。之前它运行得很好,但是我现在允许在“From”、“to”等后面输入多个空格。 - Lasse Espeholt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接