如何使用正则表达式匹配和删除文件中的出现

时间:2014-07-18 09:21:31

标签: python regex

我是Python的新手,我正在尝试使用正则表达式从文件中获取一些内容。我上传了一个文件,我将它加载到内存中,然后运行这个正则表达式。我想从文件中获取名称,但它也需要使用具有“Marie Anne”空格的名称。因此,假设名称数组具有以下值:

all_names = [{name:"Marie Anne", id:1}, {name:"Johnathan", id:2}, {name:"Marie", id:3}, {name:"Anne", id:4},{name:"John", id:5}]

我正在搜索的字符串可能有多次出现,而且它是多行的。

    print all_names # this is an array of id and name, ordered descendently by names length 
    textToStrip = stdout.decode('ascii', 'ignore').lower()
    for i in range(len(all_skills)):
        print all_names[i]
        m = re.search(r'\W' + re.escape(unicode(all_names[i]['name'].lower())) + '\W',textToStrip)
        if m:
            textToStrip = re.sub(r'\W' + re.escape(unicode(all_names[i]['name'].lower())) + '\W', "", textToStrip, 100)  
            print "found " +  all_names[i]['name']
    print textToStrip

脚本正在查找名称,但是行re.sub将其从列表中删除,以避免从同一个实例中删除“Maria Anne”和“Marie”,它还删除了“,”之类的额外字符要么 ”。”之前或之后。

任何帮助都会非常感激......或者如果你有更好的解决方案可以解决这个问题。

1 个答案:

答案 0 :(得分:0)

双面的字符都被删除,因为你在re.sub()regexp中包含\ W.那是因为re.sub替换了正则表达式匹配的所有 - 你调用re.sub的方式。

还有另一种方法可以做到这一点。如果您将匹配的regext中保留的部分与分组parens一起包装,并且如果使用 callable (函数)而不是新字符串调用re.sub,则该函数可以提取该组来自匹配对象的值传递给它并组合一个保留它们的返回值。

阅读re.sub的文档以获取详细信息。