我想查明正则表达式是否匹配字符串的特定位置。
例子:
Regex r = new Regex("d");
string s = "abcdefg";
我希望匹配函数仅在给定的确切位置找到匹配项,以便使用上面的示例,匹配位置1
,3
和 5
应该分别给出 no match
、match
和 no match
。不幸的是,C# Regex.Match
方法给出:
r.Match(s, 1); // => match ("d")
r.Match(s, 3); // => match ("d")
r.Match(s, 5); // => no match
我知道这是因为 Regex.Match
方法向前搜索第一个匹配项,但是如何在不必创建子字符串的情况下防止这种行为?
最佳答案
将 \G
添加到正则表达式的开头:
Regex r = new Regex(@"\Gd");
string s = "abcdefg";
Console.WriteLine(r.Match(s, 1).Success); // False
Console.WriteLine(r.Match(s, 3).Success); // True
Console.WriteLine(r.Match(s, 5).Success); // False
\G
将匹配锚定到上一个匹配结束的位置,或者如果没有上一个匹配则锚定到字符串的开头。使用 Match
的第二个参数,您实际上是在告诉它是之前的匹配项,该匹配项在该位置结束。
关于c# - 如何在 C# 中的字符串的特定位置找到正则表达式匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13626446/