我想匹配
===Something===
但不是
====Something====
我提出了以下正则表达式
Regex.Match("====Something====", @"^\s*===\s*(?<!=====\s*)(?<Title>.*?)\s*===\s*$").Groups["Title"]
但它返回
=Something=
请帮助解决外观模式的问题。
答案 0 :(得分:3)
匹配完整的单词!尖括号都很重要。翻译的下面的表达 - 如果我们正在与计算机交谈是这样的:计算机,搜索以三个=符号开头的单词然后有任意数量的字母然后用三个等号结束单词。
因此,如果在单词的开头有4个等于符号 - 它就不会匹配。
string regExpression = @&#34;&lt; = {3}(\ w +)= {3}&gt;&#34;;
static void Main(string[] args)
{
// searches for the first specified instance.
string textToSearchThrough = "===Something===";
string textToSearchThrough2 = "====Something====";
// add in \s+ to the below if you wish
string regexExpression = @"<={3}(\w+)={3}>";
Regex r = new Regex(regexExpression);
// change the text to search through to the second variable textToSearchThrough2 if you wish to check
Match m = r.Match(textToSearchThrough);
Console.WriteLine(m.Success.ToString());
Console.ReadLine();
}
答案 1 :(得分:1)
另一种可能的解决方案:
(?<!=)===(?!=)(?<Title>.*?)(?<!=)===(?!=)
答案 2 :(得分:0)
您的正则表达式运行错误,因为您使用.*?
也可以匹配=
。因此,它会查找===
然后接受任何内容(其他=
),并查找将再次以===
结尾的匹配项。因此它会匹配===
字符串中的=========
,而不是您要查找的内容。但是,如果您更改.
上的\w
(匹配任何字符)(匹配单词字符)。另外最好使用\w+
insted \w*
来避免只加======
而没有任何单词(如果你不想),它应该只能匹配{{1即使没有lookbehind,例如:
===Something===
试试HERE。