簡體   English   中英

如何使用正則表達式返回字符串以從匹配的字符串中排除部分

[英]How do i return a string using regex to exclude a part from string to be matched

我試圖將字符串列表與正則表達式匹配如下 -

regex.IsMatch(displayName)

但我檢查的第二步需要確保如果displayName中的括號中包含任何文本,則不應返回匹配項。

對於前者

如果regex正在尋找包含“泥漿”的字符串

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

“我的名字是Muds” - 它應該返回一個匹配(True)。

“我的名字是包含泥漿 ” - 它應該返回NO匹配(False)。

“我的名字是 { Muds } ” - 它應該返回NO match(False)。

基本上,上面的字符串被縮減為“我的名字是” ,括號內的內容被排除在外。 所以IsMatch語句然后減少到 -

regex.IsMatch("My name is")

我制作了一個正則表達式,用於查找括號內的內容

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

我們在上面調用excluding regex

所以我想做點什么

regex.IsMatch( ExcludingRegex.Replace(displayName,“”)

簡而言之,我想排除括號內的內容以與第一個正則表達式匹配

我已經看過很多關於Negative Lookahead的例子,並且從正則表達式中汲取了上下文,但我無法為我的案例做好准備。

任何指針都會很棒。

嗨,這是我在控制台應用程序中創建的代碼。 這里我使用函數regex.split使用正則表達式拆分字符串(reg exp檢查{}中的字符串在哪里)並檢查數組中的偶數項我可以檢查我是否找到字符串泥並顯示它在哪里被找到。 賠率中的項目是在字符串{}內找到的項目。

您可以在此處下載代碼

     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();

        }

這很簡單 - 使用前瞻:

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


細分,這說:

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

請參閱regex101.com上的演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM