替换多个python模式

替换多个python模式,python,regex,twitter,Python,Regex,Twitter,我已经回顾了各种链接,但都展示了如何在一个过程中替换多个单词。但是,我不想用单词来代替模式,例如 RT@amrightnow:“真正的特朗普”特朗普关于你的“手表制造” https:\/\/t.co\/j58e8aacrE#tcot#pjnet#1A#2A#Tru mp#Trump#2016 https:\/\/t.co\u2026 当我对上面的文本执行以下两个命令时,我得到了所需的输出 result = re.sub(r"http\S+","",sent) result1 = re.sub(r

我已经回顾了各种链接,但都展示了如何在一个过程中替换多个单词。但是,我不想用单词来代替模式,例如

RT@amrightnow:“真正的特朗普”特朗普关于你的“手表制造” https:\/\/t.co\/j58e8aacrE#tcot#pjnet#1A#2A#Tru mp#Trump#2016 https:\/\/t.co\u2026

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

result = re.sub(r"http\S+","",sent)
result1 = re.sub(r"@\S+","",result)
通过这种方式,我将删除所有URL和@(tweet中的处理程序)。输出如下所示:

>>> result1
'RT  "The Real Trump" Trump About You" Watch Make #1  #tcot #pjnet #1A #2A #Trump #trump2016 '
有人能告诉我什么是最好的方法吗?我基本上是从一个文件中读取推文。我想读取每个推文,并用空格替换这些处理程序和URL。

您需要regex“或”操作符,它是管道

re.sub(r"http\S+|@\S+","",sent)
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
如果有一长串要删除的模式,常用的技巧是使用
join
创建正则表达式:

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

re.sub('|'.join(to_match), '', sent)
您可以通过使用
|
分隔模式来使用“或”模式:

re.sub(r"http\S+|@\S+","",sent)
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 RT“真正的特朗普”特朗普关于你的“手表制作”#1#tcot#pjnet#1A#2A#Tru mp#特朗普2016
请参阅文档中的小节
“|”

有人抢先一步@德莱尼:是的,他们做了。它们基本上是相同的答案,尽管我的给出了一个完整的工作示例。@mhawke,正如我在上面提到的,文档让我感到困惑,说一旦a通过,它就不会看B。。这是什么意思???@user1122534这意味着如果你的模式是
'foo | bar | barbaz'
,字符串是
'barbaz'
,那么模式将匹配
bar
(因为它首先尝试
foo
,不匹配,然后是
bar
,匹配),并且不会匹配更长的
barbabaz
(因为一旦找到匹配项,它就会停止尝试)。在浏览文档时,我得到了以下信息“a | B,其中a和B可以是任意的REs,创建一个正则表达式来匹配a或B。任意数量的REs可以用“|”分隔。这可以在组内使用(见下文)同样。扫描目标字符串时,从左到右尝试用“|”分隔的REs。当一个模式完全匹配时,该分支被接受。这意味着一旦A匹配,B将不会进一步测试,即使它将产生更长的整体匹配。”因此我没有使用它。这个文档让我感到困惑是的,这对我来说也没有意义,我所知道的是这就是你做它的方式。正则表达式可以重叠。例如,
re.sub(r'ab | abc','abc'))< /代码>返回<代码> c' < /代码>。左边的正则表达式匹配<代码> 'ab' < /Cord>,因此它获胜了。结果是,你必须考虑你写的顺序。在这种情况下,有一些潜在的重叠(例如,第一个正则表达式将匹配<代码>)。http@something“
)但我认为它仍然符合您的要求。