提取用连字符分隔的整数范围
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)
.
我尝试过滤一些流式传输的字符串以获取 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)
.