Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式解析问题_C#_Regex_Parsing - Fatal编程技术网

C# 正则表达式解析问题

C# 正则表达式解析问题,c#,regex,parsing,C#,Regex,Parsing,我需要解析下面的字符串,希望使用正则表达式,但可以找到正确的方法 输入样本令牌分隔符为;令牌内有任何字符,即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}; 谢谢您的帮助。您可以通过使用

我需要解析下面的字符串,希望使用正则表达式,但可以找到正确的方法

输入样本令牌分隔符为;令牌内有任何字符,即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};

谢谢您的帮助。

您可以通过使用拆分令牌上的字符串,然后使用正则表达式解析每个令牌:

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 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 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);
}

这是一个相当自由的正则表达式,因为它可以容忍输入的差异,例如,它不关心;:


这是一个相当自由的正则表达式,因为它可以容忍输入的差异,例如,它不关心;:


您不需要使用正则表达式进行拆分,只能使用字符串。拆分函数请尝试下面的代码行:List points=mystring.split';'。托利斯特;您不需要使用正则表达式进行拆分,只能使用字符串。拆分函数请尝试下面的代码行:List points=mystring.split';'。托利斯特;如果传递字符串1W4;2W35;4M35;13W108;注意最后一个字符中的逗号,您将得到强制转换异常。我添加了一个检查是否匹配!=空&!string.IsNullOrEmptymatch。Value@UshaP,在这种情况下,最好使用str.Splitnew char[]{';'},StringSplitOptions.RemoveEmptyEntries,方法是使用另一个重载;2W35;4M35;13W108;注意最后一个字符中的逗号,您将得到强制转换异常。我添加了一个检查是否匹配!=空&!string.IsNullOrEmptymatch。Value@UshaP,在这种情况下,最好使用str.Splitnew char[]{';'},StringSplitOptions.RemoveEmptyEntries,方法是使用另一个重载。