簡體   English   中英

正則表達式僅匹配不以“)”結尾的字符串

[英]Regex to only match a string that does not end with “)”

我有一個具有嵌套屬性的plist文件。 我需要在打開“(”之后立即獲取文本,這是“名稱”。我可以做到這一點,但是,由於存在嵌套屬性,因此當我的C#邏輯遍歷plist中的行時,名稱將有沒有辦法只匹配一個確切的模式;特別是不匹配以“)”結尾的字符串的任何部分

 : (MyNameHere                //Match
           : (propertyone)    // do not match, because it ends with ")" 

這是我用來匹配名稱的Regex。

:\s\(([a-z,A-Z,0-9,-_]+)

我正在使用C#.net 4.5

謝謝

我不知道您到底要做什么,但我懷疑平衡組會讓您感興趣: https ://msdn.microsoft.com/zh-cn/library/bs2twtah%28v=vs.110%29.aspx

如果要匹配不以結尾且不包含右括號的行,則可以使用以下模式:

(?>[^\n)]*)(?!\))

細節:

(?>...) # is an atomic group that prevents the regex engine to backtrack
(?!\))  # is a negative lookahead (not followed by ...) to check there
        # is not parenthesis after

重要的是* (和所有其他量詞一樣)默認情況下是貪婪的。

關於原子團

如果要允許包含閉合括號但不能以閉合括號結尾的行:

(?m)^.*(?<!\))$

如果您不想在[\\w-]+之后使用任何其他空格字符,則需要在最后添加一個肯定的超前斷言。 (?=\\s|$)正向超前,表示必須在匹配項后跟空格字符或行錨的結尾。

@":\s\(([\w-]+)(?=\s|$)"

如有必要,請使用\\s ,否則使用@":\\s\\(([\\w-]+)$就足夠了。

演示

暫無
暫無

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

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