Python-从文本文件中的行中删除引号中的任何内容

时间:2015-09-17 00:15:53

标签: regex python-2.7 substring

我试图从文件中删除引号内的任何文字(以及引号本身)。

基本上我需要这个:

A A2A|"Dm"A2A "C"G2E|"Dm"D2D A,2D|

转变为:

A A2A|A2A G2E|D2D A,2D|

这是我最初尝试的代码片段:

def conversion():
    with open(abc + .'txt') as infile, open(abc + '.tmp', 'w') as outfile:
        for line in infile:
            #Delete anything inside of quotes after the header
            if '"' + '' in line:
                line = line.replace('"' + '', '')
                outfile.write(line)

            #Write everything else 
            else:
                outfile.write(line)
conversion()

这会删除引号,但会保留其中的所有内容。

如果我改变

line = line.replace('"' +'','')

line = line.replace('"' + "Dm" + '"', '')

我可以摆脱包含" Dm"的任何东西,理论上我可以为每个可能的组合编程,但这将是一个庞大的PITA,我想允许人为错误(例如有人写道&# 34; Dma"而不是" Dmaj")。

我也试过使用正则表达式,但老实说我不知道​​我用它做了什么。

def conversion():
    with open(abc + '.txt') as infile, open(abc + '.tmp', 'w') as outfile:
        for line in infile:
            #Delete anything inside of quotes after the header
            if '"' in line:
                re.sub('".+"', '', line)
                outfile.write(line)

            #Write everything else 
            else:
                outfile.write(line)
conversion()

这似乎什么也没做,我已经浏览了python文档,但没有例子说明如何在我尝试的上下文中使用它。

1 个答案:

答案 0 :(得分:2)

re.sub()返回已修改的行,不会就地编辑。

line = re.sub('".*?"', '', line)
outfile.write(line)

你的正则表达式会匹配引号,因此我对其进行了编辑以使其成为non-greedy