我正在解析一个长字符串,并希望使用正则表达式来解析部分内容。
为简单起见,我们假设我的正则表达式为<[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。
答案 0 :(得分:2)
我认为你正在寻找\G<[a-z]*>
答案 1 :(得分:0)
很遗憾Regex.Match(String,Int32)不会将索引视为“^”。
如何用这样的东西来克服它:
re = new Regex(“^。{”+ index.ToString()+“}&lt; [a-z] *&gt;”);
...也就是说,在正则表达式本身内约束匹配开始的偏移量。
更新:哦。没关系。 MSDN对“\ G”的描述提到了“之前的匹配”,但它的工作原理如上所述。比我的解决方案好多了。