Lookbehind有等号

时间:2015-07-18 10:25:08

标签: c# .net regex

我想匹配

===Something===

但不是

====Something====

我提出了以下正则表达式

Regex.Match("====Something====", @"^\s*===\s*(?<!=====\s*)(?<Title>.*?)\s*===\s*$").Groups["Title"] 

但它返回

=Something=

请帮助解决外观模式的问题。

3 个答案:

答案 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>.*?)(?<!=)===(?!=)

Regular expression visualization

答案 2 :(得分:0)

您的正则表达式运行错误,因为您使用.*?也可以匹配=。因此,它会查找===然后接受任何内容(其他=),并查找将再次以===结尾的匹配项。因此它会匹配===字符串中的=========,而不是您要查找的内容。但是,如果您更改.上的\w(匹配任何字符)(匹配单词字符)。另外最好使用\w+ insted \w*来避免只加======而没有任何单词(如果你不想),它应该只能匹配{{1即使没有lookbehind,例如:

===Something===

试试HERE