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

Rng*_*bus 6 c# regex

我想测试一个正则表达式是否匹配特定索引处的字符串的一部分(并且仅从该特定索引开始).例如,给定字符串"one two 3 4 five",我想知道,在索引8处,正则表达式[0-9] +将匹配"3".RegularExpression.IsMatch和Match都采用起始索引,但是如果需要,它们都将搜索字符串的其余部分以进行匹配.

string text="one two 3 4 five";
Regex num=new Regex("[0-9]+");

//unfortunately num.IsMatch(text,0) also finds a match and returns true
Console.WriteLine("{0} {1}",num.IsMatch(text, 8),num.IsMatch(text,0));
Run Code Online (Sandbox Code Playgroud)

显然,我可以检查结果匹配是否从我感兴趣的索引开始,但是我会在大字符串上执行此操作很多次,所以我不想浪费时间在字符串中搜索匹配项.另外,我不会事先知道我将实际测试字符串的正则表达式.

我不想:

  1. 将字符串分割成某些边界就像空白一样,因为在我的情况下,我不会事先知道合适的边界是什么
  2. 必须以任何方式修改输入字符串(比如在索引8处获取子字符串然后在正则表达式中使用^)
  3. 搜索字符串的其余部分以查找匹配项,或执行其他任何对大字符串进行大量测试无法执行的操作.

我想使用任意用户提供的语法解析潜在的大型用户提供的文本正文.语法将以BNF或类似PEG的语法定义,终端将是字符串文字或正则表达式.因此,我需要检查字符串的下一部分是否与语法驱动的任何潜在终端匹配.

Jon*_*eet 12

如何使用Regex.IsMatch(string, int)\G(以"最后一场比赛开始")开头的正则表达式?

这似乎有效:

using System;
using System.Text.RegularExpressions;

class Test
{
    static void Main()
    {
        string text="one two 3 4 five";
        Regex num=new Regex(@"\G[0-9]+");

        Console.WriteLine("{0} {1}",
                          num.IsMatch(text, 8), // True
                          num.IsMatch(text, 0)); // False
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 只是为有这个问题的其他人添加一些信息,http://www.regular-expressions.info/continue.html描述了\ G锚点.根据实施情况,它似乎意味着"最后一场比赛开始"或"比赛尝试开始".在某些实现中,它可能无法解决此问题,但它似乎是C#中的"匹配尝试的开始",并且可以很好地在特定位置进行匹配. (2认同)