提取用连字符分隔的整数范围

Extracting integer ranges separated with hyphen

我尝试过滤一些流式传输的字符串以获取 C# 中的一些有用信息。 我有两种可能的字符串结构:

string examplestring1 = "from - to (mm) no. 1\r\n\r\nna 570 - 590\r\n60 18.12.20\r\nna 5390 - 5410\r\n60 18.12.20\r\nna 11380 - 11390 60 18.12.20\r\nPage 1/1";
string examplestring2 = "e ne 570 - 590 ne 5390 - 5410 ne 11380 - 11390 e";

我想获取格式为“xxx - xxx”的数组或字符串列表。喜欢:

string[] example = new string[]{"570 - 590","5390 - 5410","11380 - 11390"};

我尝试使用正则表达式:

List<string> numbers = new List<string>();
numbers.AddRange(Regex.Split(examplestring2, @"\D+"));

至少我得到了一个只包含数字的列表。但这对 examplestring1 不起作用,因为其中有日期。 我也试着玩正则表达式模式。但是像下面这样的东西不起作用。

Regex.Split(examplestring1, @"\D+" + " - " + @"\D+");

如果能提供解决方案或至少提供一些解决方法的提示,我将不胜感激。

您可以使用

var results = Regex.Matches(text, @"\d+\s*-\s*\d+").Cast<Match>().Select(x => x.Value);

参见regex demo。如果 - 的两端必须有一个正则 space,则可以使用 \d+ - \d+ 正则表达式。

如果你想匹配任何-,你可以使用[\p{Pd}\xAD]代替-

注意 .NET 中的 \d 匹配任何 Unicode 数字,要仅匹配 ASCII 数字,请使用 RegexOptions.ECMAScript 选项:Regex.Matches(text, @"\d+\s*-\s*\d+", RegexOptions.ECMAScript).