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