[英]Brackets with dot, regular expressions
我想刪除以字符串中的點結尾的剎車。 我使用常規表達式- @"\\([^)]+\\)\\."
它適用於這樣的字符串- some text (some text) some (text).
,在正則表達式之后,我得到了字符串- some text (some text) some
但是這不適用於這樣的字符串- some text (some text) some (text (text) some).
如何解決?
“如何解決?” 傳統答案:您不能。 正則表達式不支持休息結構。 對於大多數正則表達式來說都是如此。
但是.NET正則表達式引擎支持平衡組 。 使用它們,您可以識別和處理嵌套。
要處理嵌套結構,必須定義其打開和關閉模式,在這種情況下,分別是括號(
和)
。
(?<paren>\\()
(?<-paren>\\))
可以將其視為一種名為“ paren”的計數器,該計數器在遇到時遞增計數(
遇到時遞減計數)
(內部有點不同,但是作為一個隱喻,這就足夠了)。
現在,可以使用這兩個定義括號的內容,即
[^()]*
或在一個表達式中: (?:[^()]*|(?<paren>\\()|(?<-paren>\\)))+
當計數器的末尾不為零(即括號不平衡)時,整個正則表達式將失敗。 為此,使用(?(paren)(?!))
構造(這是一個有條件的 ,旨在在paren
不匹配時失敗。
完成的表達式如下所示(忽略空格)
\(
(?:
[^()]*
|(?<paren>\()
|(?<-paren>\))
)+
(?(paren)(?!))
\)\.$
現場觀看: http : //regexhero.net/tester/? id = feb992a2-cc5d-497a-9d4a-a10317487e46
推薦閱讀:
只需如下更改您的正則表達式,以匹配以結尾的括號.
@"\((?:[^()]*\([^()]*\))*[^()]*\)\."
正則表達式:
\( '('
(?: group, but do not capture (0 or more
times):
[^()]* any character except: '(', ')' (0 or
more times)
\( '('
[^()]* any character except: '(', ')' (0 or
more times)
\) ')'
)* end of grouping
[^()]* any character except: '(', ')' (0 or more
times)
\) ')'
\. '.'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.