正则表达式解析问题
本文关键字:问题 正则表达式 | 更新日期: 2023-09-27 18:26:03
我需要解析下面的字符串,并且想要使用正则表达式,但可以找到正确的方法。
输入样本(令牌分隔符为;
,令牌内为任意字符,即M/W/D)
1W4;2W35;4M35;13W108
预期输出
List<string> points = new List<string>() {"1W", "2W", "4M", "13W"};
List<int> intervals = new List<int>() {4, 35, 35, 108};
谢谢你的帮助。
您可以使用string.Split
将字符串拆分为令牌,然后使用regex:解析每个令牌
var exp = new Regex(@"^(?<point>'d+[a-zA-Z])(?<interval>'d+)$");
var str = "1W4;2W35;4M35;13W108";
var tokens = str.Split(new char[] {';'}, StringSplitOptions.RemoveEmptyEntries);
foreach (var token in tokens)
{
var match = exp.Match(token);
if (match != null)
{
points.Add(match.Groups["point"].Value);
intervals.Add(int.Parse(match.Groups["interval"].Value));
}
}
一个限制性更强的正则表达式可以是:
var regEx = new Regex("^([0-9]+[MWD])([0-9]+)$");
输出第1组和第2组:
var regEx = new Regex("^([0-9]+[MWD])([0-9]+)$");
var str = "1W4;2W35;4M35;13W108";
var vals = str.Split(';');
foreach (var v in vals)
{
var match = regEx.Match(v);
Console.WriteLine(match.Groups[1].Value);
Console.WriteLine(match.Groups[2].Value);
}
这是一个相当自由的正则表达式,因为它可以容忍输入中的差异(例如,它不关心;
):
var points = new List<string>();
var intervals = new List<string>();
foreach (Match match in Regex.Matches(input, @"('d+[MWD])('d+)"))
{
points.Add(match.Groups[1].Value);
intervals.Add(match.Groups[2].Value);
}