2011-12-04 259 views
3

我想從段落中刪除某些單詞,如「和」,「as」和「like」。有沒有從字符串中刪除單詞不是通過更換做一個簡單的方法 -Python替代字符串替換方法

new_str = str.replace(' and ', '').replace(' as ', '').replace(' like ', '') 

例如,是否有類似如下的方法?

str.remove([' and ', ' like ', ' as '])

回答

6

是的,你可以使用sub函數從re模塊:

>>> import re 
>>> s = 'I like this as much as that' 
>>> re.sub('and|as|like', '', s) 
'I this much that' 
+3

...但如果你關心甚至大約半點性能,如果這是一個簡單的規則,你不會用正則表達式來完成它。 (並不是說你需要擔心一般的性能 - 但這是一個明顯的例子,關於過早優化的陳述不適用;'str.replace'被認爲比're.sub'快得多。) –

+0

@ChrisMorgan:非常好的觀察!我也考慮過這個問題,但是OP說除了replace之外還有其他的東西,所以我不得不尋找另一個(性能更差的)解決方案 – juliomalegria

1

你可以使用正則表達式:

>>> import re 
    >>> test = "I like many words but replace some occasionally" 
    >>> to_substitute = "many|words|occasionally" 
    >>> re.sub(to_substitute, '', test) 
    'I like but replace some ' 
1

你也可以這樣做沒有正則表達式。請看下面的例子

def StringRemove(st,lst): 
    return ' '.join(x for x in st.split(' ') if x not in lst) 

>>> StringRemove("Python string Java is immutable, unlike C or C++ that would give you a performance benefit. So you can't change them in-place",['like', 'as', 'and']) 
"Python string Java is immutable, unlike C or C++ that would give you a performance benefit. So you can't change them in-place" 

>>> st="Python string Java is immutable,  unlike C or C++ that would give you a performance benefit. So you can't change them in-place" 
>>> StringRemove(st,['like', 'as', 'and'])==st 
True 
>>> 
+0

請注意,這將破壞一行中的多個空格,並將轉向'\ r', \ n'和'\ t'也放入空間。如果你關心空間,使用'st.split('')'而不是'st.split()'。此外,'join()'體的方括號並不整齊。我會放棄它們,並使其成爲一個生成器表達式(對於較大的輸入,也會使用較少的內存),而不是列表理解。 –

+0

謝謝指出。我調整了一點,現在它可以與多個空格和其他分隔符一起工作。我也將列表更改爲生成器。 – Abhijit

+0

您的更改使標籤和換行符不再用作單詞分隔符,因此,如果它們出現在選項卡後面,則不會消除單詞。 –

0

請注意,如果你關心的是可讀性和不一定的表現,你可以做這樣的事情:

new_str = str 
for word_to_remove in [' and ', ' as ', ' like ']: 
    new_str = new_str.replace(word_to_remove, '')