2016-02-12 100 views
0

我有一个列表删除从字符串

forbidden_patterns=['Word1','Word2','Word3','\d{4}'] 

和一个字符串列表中定义的任何模式(字或正则表达式):

string1="This is Word1 a list thatWord2 I'd like to 2016 be readableWord3" 

什么是有字符串1的方式已将中定义的所有图案和单词删除,禁用图案已删除,因此它结尾为:

clean_string="This is a list that I'd like to be readable" 

\ d {4}是去除年份模式,在这种情况下是

列表理解是非常欢迎

+0

[如何从Python中删除字符串中的符号?](http://stackoverflow.com/questions/875968/how-to-remove-symbols-from-a-string-with-python) – JETM

+0

为什么你有'\ d {4}'?这是一种“重复”模式? –

+0

@IronFist我相信OP想要使用正则表达式。 – pzp

回答

2

给你:

import re 

forbidden_patterns = ['Word1', 'Word2', 'Word3', '\d{4}'] 

string = "This is Word1 a list thatWord2 I'd like to 2016 be readableWord3" 

for pattern in forbidden_patterns: 
    string = ''.join(re.split(pattern, string)) 

print(string) 

从本质上讲,该代码经过每个模式中forbidden_patterns,使用特定的分裂string模式作为分隔符(它从字符串中删除分隔符,在这种情况下是模式),并将它连接在一起形成下一个模式的字符串。

编辑

为了摆脱多余的空间,把下面的行作为第一行中的for循环:

string = ''.join(re.split(r'\b{} '.format(pattern), string)) 

此行检查,如果图案是整个词,如果是的话,删除该词和其中一个空格。确保这条线上面string = ''.join(re.split(pattern, string)),这是“不太具体”比这条线。

2
import re 

new_string = string1 
for word in forbidden_words: 
    new_string = re.sub(word, '', new_string) 

new_string会是你想要的。虽然,这是一个有点长,除去一些话让你有2位为This is a list that I'd like to be readable