当前位置: 首页 > 编程语言 > C#

正则表达式C#——是否可以在匹配时提取匹配?Share

时间:2023-04-10 21:07:25 C#

RegexC#-是否可以在匹配时提取匹配项?比如说,我有一个字符串需要验证其格式是否正确;例如RR1234566-001(2个字母、7个数字、破折号、1个或多个数字)。我使用类似:Regexregex=newRegex(patternString);如果(regex.IsMatch(stringToMatch)){返回真;}else{返回错误;这告诉我stringToMatch是否遵循由patternString定义的patternString。我需要的是(我在最后提取了这些):123456和001-即stringToMatch部分。请注意,这不是关于如何构造正则表达式的问题。我要问的是:“有没有办法同时匹配和提取值,而不必稍后使用拆分功能?”您可以使用正则表达式组执行此操作。例如,这个正则表达式:(ddd)-(ddddddd)让我们用这个正则表达式匹配一个电话号码:varregex=newRegex(@"(ddd)-(ddddddd)");varmatch=regex.Match("123-4567890");if(match.Success)....如果匹配,您将找到前三位数字:match.Groups[1].Value和后7位数字:match.Groups[2].ValuePS在C#中,您可以使用@""样式字符串以避免转义反斜杠。例如,@"hi"等于"\hi\"。对正则表达式和路径很有用。PS2。如您所料,第一组存储在Group[1]中,而不是Group[0]中。那是因为Group[0]包含整个匹配的字符串。请改用分组和匹配。即://注意:伪代码。Regexre=newRegex("(\d+)-(\d+)");匹配m=re.Match(stringToMatch))if(m.Success){Stringpart1=m.Groups[1].Value;Stringpart2=m.Groups[2].Value;返回真;}else{返回错误;您还可以命名匹配项,如下所示:Regexre=newRegex("(?\d+)-(?\d+)");并访问Stringpart1=m.Groups["Part1"].Value;Stringpart2=m.Groups["Part2"].Value;可以使用括号来捕获字符组:以上是C#学习教程:RegularExpressionC#-Isitpossibletoextractamatchwhenmatches?分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——stringtest="RR1234566-001";//捕获2个字母,然后是7个数字,然后是连字符,然后是1个或更多数字stringrx=@"^([A-Za-z]{2})(d{7})(-)(d+)$";匹配m=Regex.Match(test,rx,RegexOptions.IgnoreCase);如果(m.Success){Console.WriteLine(m.Groups[1].Value);//RRConsole.WriteLine(m.Groups[2].Value);//1234566Console.WriteLine(m.Groups[3].Value);//-Console.WriteLine(m.Groups[4].Value);//001返回真;}else{返回错误;}字符串文本=“RR1234566-001”;字符串注册x=@"^([AZaz]{2})(d{7})(-)(d+)";匹配mtch=Regex.Matches(text,regex);如果(mtch.Success){Console.WriteLine(m.Groups[1].Value);Console.WriteLine(m.Groups[2].Value);Console.WriteLine(m.Groups[3].Value);Console.WriteLine(m.Groups[4].Value);返回真;}else{返回错误;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: