代码之家  ›  专栏  ›  技术社区  ›  Muds

如何使用regex返回字符串以从要匹配的字符串中排除部分

  •  1
  • Muds  · 技术社区  · 7 年前

    我正在尝试将字符串列表与正则表达式匹配,如下所示-

    regex.IsMatch(displayName)
    

    但我检查的第二步需要确保 displayName 它不应返回匹配项。

    对于ex。

    如果 regex 正在查找包含“Muds”的字符串

    所以如果我的第一个字符串是

    “我的名字是Muds”--它应该返回一个匹配项(True)。

    “我的名字是 ( 所含泥浆 ) “--它应该返回 匹配(False)。

    “我的名字是 ( { 泥浆 } ) “--它应该返回 匹配(False)。

    因此,从本质上讲,上述字符串减少为 “我的名字是” 括号内的内容除外。 所以IsMatch语句被简化为-

    regex.IsMatch("My name is")
    

    我制作了一个正则表达式来查找括号内的内容

    Regex excludingRegex = "\s?(?:\(.+\)|\[.+\]|<.+>|{.+})\s?"
    

    让我们调用上面的作为 excluding regex

    所以我想做一些

    正则表达式。IsMatch公司( 不包括Gregex。替换(displayName,“”) )

    简而言之,我想排除括号内与第一个正则表达式匹配的内容

    我见过很多关于 消极前瞻 并从regex中删除上下文,但我无法将其正确用于我的案例。

    任何指针都会很好。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Juan    7 年前

    您好,这是我在控制台应用程序中创建的代码。这里我使用函数regex。split使用正则表达式拆分字符串(reg exp检查{}中的字符串位置),并检查数组中的偶数项,我可以检查是否找到字符串mud并显示找到它的位置。赔率中的项目是已检查字符串中{}内的项目。

    您可以下载代码 here

         static void Main(string[] args)
            {
     string input = "My name is ( { Muds } ) My name is MUDS ( { Juan } ) My name is ( { Ortiz Mud } ) otra cosa por aca {juan} pero pues aqui mud {yani}";
                string pattern = @"\{(.*?)\}"; 
    
                string[] substrings = Regex.Split(input, pattern);
    
                for(int i= 0; i <= substrings.Length; i ++)
                {
                    if(i % 2 == 0)
                    {
                        if (substrings[i].ToLower().Contains("mud"))
                        {
                            Console.Write(string.Format("This string has mud outside of brackets. Found in string: {0}", substrings[i].ToString()));
                            Console.Write("\n");
                        }
                    }
                }
    
    
    
                Console.Read();
    
            }
    
        2
  •  1
  •   Jan    7 年前

    这相当简单-使用前瞻:

    ^(?!.*\([^()]*\)).+
    


    分解后,显示:
    ^                # start of the string
    (?!.*\([^()]*\)) # neg. lookahead making sure there's nothing between ( and )
    .+               # match the line
    

    看见 a demo on regex101.com .