替换多个模式python

时间:2016-03-01 02:19:49

标签: python regex twitter

我查看了各种链接,但都展示了如何在一次传递中替换多个单词。但是,我想替换模式,而不是单词,例如

  RT @amrightnow:“真正的特朗普”特朗普关于你“观看#1   https:\ / \ / t.co \ / j58e8aacrE #tcot #pjnet#1A#2A #Tru mp#trump2016   HTTPS:\ / \ / t.co \ U2026

当我在上面的文本上执行以下两个命令时,我得到了所需的输出

result = re.sub(r"http\S+","",sent)
result1 = re.sub(r"@\S+","",result)

这样我就会删除所有网址和@(来自推文的处理程序)。输出将如下所示:

>>> result1
'RT  "The Real Trump" Trump About You" Watch Make #1  #tcot #pjnet #1A #2A #Trump #trump2016 '

有人能告诉我这是最好的方法吗?我将基本上从文件中读取推文。我想阅读每条推文,并用空格替换这些处理程序和网址。

2 个答案:

答案 0 :(得分:3)

你需要正则表达式"或"作为管道|的运算符:

re.sub(r"http\S+|@\S+","",sent)

如果您要删除多个模式列表,常见的诀窍是使用join创建正则表达式:

to_match = ['http\S+',
            '@\S+',
            'something_else_you_might_want_to_remove']

re.sub('|'.join(to_match), '', sent)

答案 1 :(得分:0)

您可以使用|分隔模式来使用“或”模式:

import re

s = u'RT @amrightnow: "The Real Trump" Trump About You" Watch Make #1 https:\/\/t.co\/j58e8aacrE #tcot #pjnet #1A #2A #Tru mp #trump2016 https:\/\/t.co\u2026'
result = re.sub(r"http\S+|@\S+", "", s)
print result

<强>输出

RT  "The Real Trump" Trump About You" Watch Make #1  #tcot #pjnet #1A #2A #Tru mp #trump2016

请参阅regular expression syntax文档中的'|'小节。