簡體   English   中英

從字符串中刪除括號內的內容

[英]remove contents between brackets from string

我有一個像這樣的字符串:

s = 'word1 word2 (word3 word4) word5 word6 (word7 word8) word9 word10'

如何刪除括號中的所有內容,以便輸出為:

'word1 word2 word5 word6 word9 word10'

我嘗試了正則表達式,但這似乎不起作用。 有什么建議?

最好的雅克

import re
s = re.sub(r'\(.*?\)', '', s)

請注意,這僅刪除括號之間的所有內容。 這意味着你將在“word2和word5”之間留下雙倍的空間。 我的終端輸出:

>>> re.sub(r'\(.*?\)', '', s)
'word1 word2  word5 word6  word9 word10'
>>> # -------^ -----------^ (Note double spaces there)

但是,您提供的輸出並非如此。 要刪除多余的空格,您可以執行以下操作:

>>> re.sub(r'\(.*?\)\ *', '', s)
'word1 word2 word5 word6 word9 word10'

我的解決方案更好,因為它刪除了額外的空間字符;-)

re.sub( "\s\(.*?\)","",s)

編輯 :你是寫的,它沒有捕獲所有的情況。 當然,我可以編寫更復雜的表達式,試圖考慮更多細節:

re.sub( "\s*\(.*?\)\s*"," ",s)

現在結果是一個所需的字符串或“”,如果原始字符串受括號和空格限制。

您應該用空字符串替換所有出現的此正則表達式: \\([^\\)]*\\)

你可以逐字逐句地完成它。 如果你保留一個作為結果字符串的字符串,一個作為discard字符串的字符串,以及你是否正在刪除的布爾值。

然后,對於每個字符,如果布爾值為true,則將其添加到刪除字符串中,如果它為false,則將其添加到實際字符串中。 如果它是一個開放式括號,你將它添加到刪除字符串並將布爾值設置為true; 如果它是一個小括號,你將刪除字符串設置為“”並將布爾值設置為false。

最后,如果有一個括號打開但未關閉,最后會留下刪除字符串。

如果要處理多個括號,請使用已打開但尚未關閉的整數計數,而不是布爾值。

如果你的行的格式總是像你顯示的那樣,你可能會嘗試沒有正則表達式:

>>> s.replace('(','').replace(')','')
'word1 word2 word3 word4 word5 word6 word7 word8 word9 word10'

這比常規表達快4倍

>>> t1 = timeit.Timer("s.replace('(','').replace(')','')", "from __main__ import s")
>>> t2 = timeit.Timer("sub(r'\(.*?\)\ *', '', s)", "from __main__ import s; from re import sub")
>>> t1.repeat()
[0.73440917436073505, 0.6970294320000221, 0.69534249907820822]
>>> t2.repeat()
[2.7884134544113408, 2.7414613750137278, 2.7336896241081377]

暫無
暫無

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

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