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

c#正则表达式匹配字符串中的特定索引?分享

时间:2023-04-11 02:36:02 C#

c#regex来匹配字符串中的特定索引?我想测试正则表达式是否匹配特定索引处的字符串的一部分(并且仅从该特定索引开始)。例如,给定字符串“一二34五”,我想知道在索引8处,正则表达式[0-9]+将匹配“3”。RegularExpression.IsMatch和Match都采用起始索引,但它们都会在必要时搜索字符串的其余部分以进行匹配。stringtext="一二三四五";Regexnum=newRegex("[0-9]+");//不幸的是num.IsMatch(text,0)也找到匹配并返回trueConsole.WriteLine("{0}{1}",num.IsMatch(text,8),num.IsMatch(text,0));显然,我可以检查生成的匹配项是否从我感兴趣的索引开始,但是我最终会得到一个大字符串在上多次执行此操作,所以我不想浪费时间搜索匹配项在字符串中。此外,我不会提前知道我将实际测试字符串的正则表达式。我不想:在某些边界处拆分字符串,比如空格,因为在我的情况下,我事先不知道适当的边界是什么,并且必须以任何方式修改输入字符串(比如在索引8处获取sub字符串,然后在正则表达式中使用^)来搜索字符串的其余部分以查找匹配项,或者您不必对大字符串进行大量测试的任何其他内容。我想使用任意用户提供的语法来解析可能很大的用户提供的文本文字。语法将以BNF或类似PEG的语法定义,终结符将是字符串文字或正则表达式。所以我需要检查字符串的下一部分是否与语法驱动的任何潜在终端相匹配。如何将Regex.IsMatch(string,int)(意思是“最后一场比赛的开始”)与以G开头的正则表达式一起使用?这似乎有效:使用系统;使用System.Text.RegularExpressions;类测试{staticvoidMain(){stringtext="onetwo345";Regexnum=newRegex(@"G[0-9]+");Console.WriteLine("{0}{1}",num.IsMatch(text,8),//Truenum.IsMatch(text,0));//False}}如果您只想搜索文本字符串的子字符串,请在正则表达式之前获取该子字符串。myRegex.Match(myString.Substring(8,10));我不确定我是否完全理解这个问题,但在我看来,您可以简单地将位置作为正则表达式的一部分包含在内,例如^.{8}[d]如果字符串开头之间有8个字符则匹配和号码。如果您知道字符串中潜在匹配项的最大长度,则检查这是否会限制字符串的扫描。如果您只检查数字,这可能比检查任意表达式更容易。正则表达式的本质是扫描到末尾找到匹配项。如果你想防止扫描,你需要包括长度,或者使用Regex以外的东西。stringtext="一二三四五";Regexnum=newRegex("[0-9]+");intindexToCheck=8;int最大匹配长度=...;匹配m=num.Match(text,indexToCheck,maxMatchLength);您知道哪些类型的表达式可能会在字符串上运行,并且扫描整个字符串的开销是否太大?num.Match将返回第一个匹配项(如果存在),然后停止扫描。如果您想要更多匹配项,可以调用m.NextMatch()继续扫描匹配项。以上就是C#学习教程:c#正则表达式匹配字符串中的特定索引?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: