Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.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#_.net_Regex - Fatal编程技术网

C# 用于验证和从字符串中提取数据的正则表达式

C# 用于验证和从字符串中提取数据的正则表达式,c#,.net,regex,C#,.net,Regex,我正在尝试在.NETC#中创建2个正则表达式 多次验证用户写入的输入是否具有以下格式: 样本: /TEXT;dd-mm-yyyy;TEXT/TEXT;dd-mm-yyyy;TEXT/TEXT;dd-mm-yyyy;TEXT 或 至少应输入1次。 中间部分:dd-mm-yyyy应为日-月-年,如1997年2月20日 在parts文本中不应该有任何/否则我接受regex将失败 第二个正则表达式是提取“组” 我试过: string test = "/TEXT;dd-mm-yyyy;TEXT/TEXT

我正在尝试在.NETC#中创建2个正则表达式

  • 多次验证用户写入的输入是否具有以下格式:
  • 样本:

    /TEXT;dd-mm-yyyy;TEXT/TEXT;dd-mm-yyyy;TEXT/TEXT;dd-mm-yyyy;TEXT
    

    至少应输入1次。 中间部分:dd-mm-yyyy应为日-月-年,如1997年2月20日 在parts文本中不应该有任何/否则我接受regex将失败

  • 第二个正则表达式是提取“组”
  • 我试过:

    string test = "/TEXT;dd-mm-yyyy;TEXT/TEXT;dd-mm-yyyy;TEXT/TEXT;dd-mm-yyyy;TEXT";
                string reguexp = "[\\/(\\w+;\\w+;\\w+)+]";
                foreach (System.Text.RegularExpressions.Match match in System.Text.RegularExpressions.Regex.Matches(test, reguexp))
                {
                    Console.WriteLine("'{0}' found at index {1}.", match.Value, match.Index);
                }
    
    但是,它不工作,因为它会将每个字符检测为匹配,我想提取“组”
    /TEXT;年月日;文本
    一个接一个,以便以后执行任何额外的数据处理

    我试着从第二个正则表达式开始,认为一旦我有了这个正则表达式,另一个就应该更容易了

    任何帮助都可以接受。 致以最诚挚的问候

    您应该使用以下组:

    var strRegex = @"(?<date>\d{2}-\d{2}-\d{4})+";
    var myRegex = new Regex(strRegex, RegexOptions.None);
    var strTargetString = @"01-02-2000;15-03-2018";
    
    foreach (Match myMatch in myRegex.Matches(strTargetString))
    {
        var dateString = myMatch.Groups["date"].Value;
    
        // TODO: Check dateString is valid date (e.g. with DateTime.TryParseExact(...))
    }
    
    var stregex=@“(?\d{2}-\d{2}-\d{4})+”;
    var myRegex=新正则表达式(strRegex,RegexOptions.None);
    var strTargetString=@“01-02-2000;15-03-2018”;
    foreach(在myRegex.Matches中匹配myMatch(strTargetString))
    {
    var dateString=myMatch.Groups[“date”].Value;
    //TODO:检查dateString是否为有效日期(例如,使用DateTime.TryParseExact(…)
    }
    
    Regex
    不是验证日期的好方法,只要想想闰年、
    28/29二月
    等:
    29-02-2016
    30-03-2016
    都可以,如果
    29-02-2017
    30-02-2016
    不可以,我同意@DmitryBychenko使用Regex验证日期是不好的。您可以使用正则表达式提取各个日期并对其进行验证。如果您查看每个匹配项,则regex将使用groups属性,然后您可以提取组和其中的数据,然后检查有效日期etcI是否类似于
    \/\w+\d{2}-\d{2}-\d{4}\w+
    应该做你需要做的事情。看看这个:谢谢,但我需要的不是验证日期,我想验证整个格式,如果日期无效,只要模式匹配就可以接受。另外,这个想法不是日期的正则表达式,而是while模式。
    var strRegex = @"(?<date>\d{2}-\d{2}-\d{4})+";
    var myRegex = new Regex(strRegex, RegexOptions.None);
    var strTargetString = @"01-02-2000;15-03-2018";
    
    foreach (Match myMatch in myRegex.Matches(strTargetString))
    {
        var dateString = myMatch.Groups["date"].Value;
    
        // TODO: Check dateString is valid date (e.g. with DateTime.TryParseExact(...))
    }