我想從段落中刪除某些單詞,如「和」,「as」和「like」。有沒有從字符串中刪除單詞不是通過更換做一個簡單的方法 -Python替代字符串替換方法
new_str = str.replace(' and ', '').replace(' as ', '').replace(' like ', '')
例如,是否有類似如下的方法?
str.remove([' and ', ' like ', ' as '])
我想從段落中刪除某些單詞,如「和」,「as」和「like」。有沒有從字符串中刪除單詞不是通過更換做一個簡單的方法 -Python替代字符串替換方法
new_str = str.replace(' and ', '').replace(' as ', '').replace(' like ', '')
例如,是否有類似如下的方法?
str.remove([' and ', ' like ', ' as '])
是的,你可以使用sub
函數從re
模塊:
>>> import re
>>> s = 'I like this as much as that'
>>> re.sub('and|as|like', '', s)
'I this much that'
你可以使用正則表達式:
>>> 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 '
你也可以這樣做沒有正則表達式。請看下面的例子
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
>>>
請注意,這將破壞一行中的多個空格,並將轉向'\ r', \ n'和'\ t'也放入空間。如果你關心空間,使用'st.split('')'而不是'st.split()'。此外,'join()'體的方括號並不整齊。我會放棄它們,並使其成爲一個生成器表達式(對於較大的輸入,也會使用較少的內存),而不是列表理解。 –
謝謝指出。我調整了一點,現在它可以與多個空格和其他分隔符一起工作。我也將列表更改爲生成器。 – Abhijit
您的更改使標籤和換行符不再用作單詞分隔符,因此,如果它們出現在選項卡後面,則不會消除單詞。 –
請注意,如果你關心的是可讀性和不一定的表現,你可以做這樣的事情:
new_str = str
for word_to_remove in [' and ', ' as ', ' like ']:
new_str = new_str.replace(word_to_remove, '')
...但如果你關心甚至大約半點性能,如果這是一個簡單的規則,你不會用正則表達式來完成它。 (並不是說你需要擔心一般的性能 - 但這是一個明顯的例子,關於過早優化的陳述不適用;'str.replace'被認爲比're.sub'快得多。) –
@ChrisMorgan:非常好的觀察!我也考慮過這個問題,但是OP說除了replace之外還有其他的東西,所以我不得不尋找另一個(性能更差的)解決方案 – juliomalegria