如何从字符串中删除特定单词?

91

我需要从字符串中删除一个特定的单词。

但我发现Python的strip方法似乎无法识别有序的单词。它只会删除传递给参数的任何字符。

例如:

>>> papa = "papa is a good man"
>>> app = "app is important"
>>> papa.lstrip('papa')
" is a good man"
>>> app.lstrip('papa')
" is important"

如何使用Python去除指定的单词?


1
你看过 S.lstrip 的文档吗?它的功能与你想要做的完全不同。你需要用 replace 将这个字符串替换为空。 - Benjamin Bannier
1
你想对单词“papaya”进行什么操作? - DSM
1
@DSM 我猜输出应该是 ya。让我们等待 OP 确认。 - thefourtheye
2
@zen 您确定接受的答案没问题吗?请尝试运行以下代码 print "papa is papa is papa".replace('papa', ''),如果输出结果对您来说没问题,那么接受的答案是正确的。 - thefourtheye
1
只是想补充一点。请注意,如果您试图删除句子中的最后一个单词,那么您将在句子末尾留下一个空格,这可能不是所需的。例如,如果您执行 papa.replace('man', '')。您最终将得到 'papa is a good '(请注意 'good' 后面的空格)。 - Ely Fialkoff
9个回答

125

使用str.replace方法。

>>> papa.replace('papa', '')
' is a good man'
>>> app.replace('papa', '')
'app is important'

或者使用re并使用正则表达式。这将允许删除前导/尾随空格。

>>> import re
>>> papa = 'papa is a good man'
>>> app = 'app is important'
>>> papa3 = 'papa is a papa, and papa'
>>>
>>> patt = re.compile('(\s*)papa(\s*)')
>>> patt.sub('\\1mama\\2', papa)
'mama is a good man'
>>> patt.sub('\\1mama\\2', papa3)
'mama is a mama, and mama'
>>> patt.sub('', papa3)
'is a, and'

2
尝试运行 print "papa is papa is papa".replace('papa', '') - thefourtheye
1
分心了,没有完成使用 re 的示例,这将允许去除前导/尾随空格。 - metatoaster
@thefourtheye 返回 ' is is '。所有三个 'papa' 都被删除了,因为实际上需要的是什么。我能知道您的观点应该是什么吗? - Shayan Shafiq
1
@metatoaster "papa.replace('papa', '').strip()" 还会移除前后的空格。 - Shayan Shafiq
@ShayanShafiq 特别是与单词相关的前导和尾随空格。目的是将替换与模式耦合;请参见对papa3的使用(您应该测试papa3.replace('papa','') .strip())。 - metatoaster

20

最简单的方法就是将其替换为空字符串。

s = s.replace('papa', '')

3
您可能还需要在“papa”后添加一个空格 - 我假设他不想在字符串中留下前导空格。 - Jacob Kudria
2
尝试运行 print "papa is papa is papa".replace('papa', '') - thefourtheye
@s = s.replace('papa', '').strip() 也能达到同样的目的。 - Shayan Shafiq

15

如果我们谈论前缀和后缀,并且您的 Python 版本至少为 3.9,则可以使用这些新方法

>>> 'TestHook'.removeprefix('Test')
'Hook'
>>> 'BaseTestCase'.removeprefix('Test')
'BaseTestCase'

>>> 'MiscTests'.removesuffix('Tests')
'Misc'
>>> 'TmpDirMixin'.removesuffix('Tests')
'TmpDirMixin'

8
如果想要仅从字符串开头删除单词,则可以执行以下操作:
  string[string.startswith(prefix) and len(prefix):]  

其中,string代表你的字符串变量,prefix代表你想要从字符串变量中删除的前缀。

例如:

  >>> papa = "papa is a good man. papa is the best."  
  >>> prefix = 'papa'
  >>> papa[papa.startswith(prefix) and len(prefix):]
  ' is a good man. papa is the best.'

4

你也可以使用正则表达式和re.sub

article_title_str = re.sub(r'(\s?-?\|?\s?Times of India|\s?-?\|?\s?the Times of India|\s?-?\|?\s+?Gadgets No'',
                           article_title_str, flags=re.IGNORECASE)

3

如果你知道想要替换的字符数组中每个单词的起始和结束索引值,并且只想替换特定的数据块,那么可以按照以下方式进行操作。

>>> s = "papa is papa is papa"
>>> s = s[:8]+s[8:13].replace("papa", "mama")+s[13:]
>>> print(s)
papa is mama is papa

或者,如果您还希望保留原始数据结构,可以将其存储在字典中。

>>> bin = {}
>>> s = "papa is papa is papa"
>>> bin["0"] = s
>>> s = s[:8]+s[8:13].replace("papa", "mama")+s[13:]
>>> print(bin["0"])
papa is papa is papa
>>> print(s)
papa is mama is papa

2
一个比较“懒”的方法是使用startswith,它比正则表达式更容易理解。但是,我没有测试过正则表达式是否更快。
>>> papa = "papa is a good man"
>>> app = "app is important"
>>> strip_word = 'papa'
>>> papa[len(strip_word):] if papa.startswith(strip_word) else papa
' is a good man'
>>> app[len(strip_word):] if app.startswith(strip_word) else app
'app is important'

2

最好的方法是

  1. 分割单词

  2. 使用if语句连接我们感兴趣的单词(您可以传入多个要删除的单词)

    sentence = "papa is a good man"

    ' '.join(word for word in sentence.split() if word not in ['papa'])


如果你想防止删除“papa”作为另一个单词的一部分,那么这是非常有帮助的解决方案。例如,这个解决方案不会用replace()函数将“papaya”替换为“ya”,这可能会导致问题。 - volkut

2

请检查:

use replace()
------------
var.replace("word for replace"," ")
-----------------------------------
one = " papa is a good man"

two = " app is important"

one.replace(" papa ", " ")

output=> " is a good man"

two.replace(" app ", " ")

output=> " is important

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接