[英]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.