约束正则表达式匹配的起点

时间:2011-02-24 19:09:15

标签: c# regex

我正在解析一个长字符串,并希望使用正则表达式来解析部分内容。

为简单起见,我们假设我的正则表达式为<[a-z]*>,当我到达第一个<时,我想运行它。

public int FindEnd(string longStr, int index) {
    // longStr[index] == '<'

    var match = regex.Match(longStr, index);
    if (!match.Success || match.Index != index) {
        throw new Exception("Mismatch");
    } else {
        return index + match.Length;
    }
}

我想以某种方式限制正则表达式,以便它不会覆盖整个字符串,但只在给定的起始点查找字符串 - 这可能吗?我尝试了^<[a-z]*>但是没有用 - 它不会接受任何内容(除非index指向字符串的开头)。

注意:我尝试parse HTML with a regex

2 个答案:

答案 0 :(得分:2)

我认为你正在寻找\G<[a-z]*>

答案 1 :(得分:0)

很遗憾Regex.Match(String,Int32)不会将索引视为“^”。

如何用这样的东西来克服它:

re = new Regex(“^。{”+ index.ToString()+“}&lt; [a-z] *&gt;”);

...也就是说,在正则表达式本身内约束匹配开始的偏移量。

更新:哦。没关系。 MSDN对“\ G”的描述提到了“之前的匹配”,但它的工作原理如上所述。比我的解决方案好多了。