簡體   English   中英

帶括號的正則表達式

[英]Regex with Parenthesis

我正在嘗試從字符串中刪除以下內容:

串:

Snowden (left), whose whereabouts remain unknown, made the extraordinary claim as his father, Lon (right), told US television he intended to travel

我正在使用以下正則表達式: ([(].*[)]) ,但它是匹配的:

(left), whose whereabouts remain unknown, made the extraordinary claim as his father, Lon (right)

這是有道理的,但不是我想要的。

我該怎么解決? 它與貪婪或懶惰有關嗎?

編輯:

我正在使用Python:

paren = re.findall(ur'([(\u0028][^)\u0029]*[)\u0029])', text, re.UNICODE)

        if paren is not None:
                text = re.sub(s, '', text)

這將導致以下輸出:

 Snowden (), whose whereabouts remain unknown, made the extraordinary claim as his father, Lon (), told US television he intended to travel

但是,當我打印paren.group(0)時,我得到“(左)”,這意味着要包括括號,這是為什么?

謝謝。

使用否定: ([(][^)]*[)]) 這將與開頭匹配(然后是任意個非閉包的字符) ,然后是閉包)

您可以用這種方式取反任何字符或一組字符。 要匹配文字^插入符,可以將其放在[]字符集之外,也可以將其放在第一個字符之后的任意位置,例如: [a^bc] 閱讀正使用的正則表達式語言的規則總是一個好主意,以確切了解可能的內容和正確的語法。

貪婪或懶惰是一條規則,可能不會在所有正則表達式實現中都實現相同(如果有的話)。 最好要明確地說出要查找的內容,而不要依賴於難以理解和調試(有時)的規則。

限制。*以僅匹配非括號的內容:

([(][^()]*[)])
  • 首先,不需要[]來輸入單個字符。 逃脫括號
  • 其次,使用。*? 非貪婪的比賽

    /\\(.*?\\)/

正如pguardiario所提到的(我贊成),您不需要字符類,只需繞開括號即可。

他的解決方案將起作用,但有一個警告:如果括號中的文本是用硬包裝的,則使用. 不會捕獲\\n 為此,您需要一個字符類。

我建議的解決方案:

\([^)]*\)

這樣可以避免在任一端插入括號,並且將始終捕獲括號內的所有內容(當然,除非它包含另一個括號子句)。

這是一個風格問題,但是我更喜歡[(]而不是\\(所以我會使用([(][^)]*[)])

您尚未指定使用哪種語言。 如果是Perl,我將使用合格的/ x來允許添加空格以保持清晰

/ ( [(] [^)]* [)] ) /x

暫無
暫無

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

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