从python中的多行字符串中删除模式匹配的行

时间:2014-12-15 12:59:01

标签: python

我有一个多行文本字符串,如下所示:

AAAA BBBBBB
BBBB VVVV XXXX

CCCCCCCC XXXX

我想提出一个小函数,如果它包含一个单词/短语就删除整行,所以如果我说让'VVV'作为一个paremeter发送,输出将是:

AAAA BBBBBB

CCCCCCCC XXXX

stackoverflow上有很多例子,例如Remove lines that contain certain string,它们展示了如何为文件执行此操作,但我不确定如何不打开文件。

3 个答案:

答案 0 :(得分:4)

您可以使用re.sub

>>> import re
>>> my_string
'AAAA BBBBBB\nBBBB VVVV XXXX\n\nCCCCCCCC XXXX'
>>> re.sub(".*VVV.*\n?","",my_string)
'AAAA BBBBBB\n\nCCCCCCCC XXXX'

您可以定义一个函数,并且可以对任何子字符串执行:

>>> def remove(rem,my_string):
...     return re.sub(".*"+rem+".*\n?","",my_string)
... 
>>> remove("VVV",my_string)
'AAAA BBBBBB\n\nCCCCCCCC XXXX'
>>> remove("XXX",my_string)
'AAAA BBBBBB\n\n'
>>> remove("BBB",my_string)
'\nCCCCCCCC XXXX'
>>> remove("CCCC",my_string)
'AAAA BBBBBB\nBBBB VVVV XXXX\n\n'

答案 1 :(得分:1)

inp = "AAAA BBBBBB\nBBBB VVVV XXXX\n\nCCCCCCCC XXXX"

ans = ""
pattern = "VVVV"
for line in inp.split("\n"):

    if line.find(pattern)<0:
        ans=ans + line+"\n"
print ans

答案 2 :(得分:1)

>>> text = '''AAAA BBBBBB
BBBB VVVV XXXX

CCCCCCCC XXXX'''
>>> text = '\n'.join(line for line in text.split('\n') if 'VVV' not in line)
>>> print text
AAAA BBBBBB

CCCCCCCC XXXX