2011-06-01 31 views
2

我有一段代码,我需要从多个文件中删除启动这样的:为什么我的正则表达式不能处理来自file.read()的输入?

<?php 
//{{56541616 

结束这样的:

//}}18420732 
?> 

其中数字是两个字符串可以是任何序列字母和数字(不一样)。

我写了一个Python程序,将返回整个输入字符串,除了这个问题字符串:

def removeInsert(text): 
    m = re.search(r"<\?php\n\/\/\{\{[a-zA-Z0-9]{8}.*\/\/\}\}[a-zA-Z0-9]{8}\n\?>", text, re.DOTALL) 
    return text[:m.start()] + text[m.end():] 

这个程序的伟大工程,当我把它与removeInsert(“”“[文件文本]”“” ) - 三重引号允许将它读入多行。

我试图扩展这个打开一个文件,并将该文件的字符串内容到removeInsert()与此:

def fileRW(filename): 
    input_file = open(filename, 'r') 
    text = input_file.read() 
    newText = removeInsert(text) 
    ... 

然而,当我运行fileRW([输入文件]),I得到这个错误:

return text[:m.start()] + text[m.end():] 
AttributeError: 'NoneType' object has no attribute 'start' 

我可以证实,“文本”在这最后的代码实际上是一个字符串,确实包含问题代码,但它似乎removeInsert()的代码不会对这个字符串工作。我最好的猜测是它与我在手动输入字符串到removeInsert()时执行的三重引用有关。也许fileRW传递给removeInsert()的文本不是三引号的(我试过用不同的方法强制它有三重引号(“\”\“\”“加),但那是行不通的) 。我不知道如何解决这个问题,但在我的谷歌搜索中找不到任何有关它的信息。任何建议?

回答

1

你的正则表达式只使用\n作为行,你的文本编辑器可能会插入一个回车和换行符组合:\r\n尝试在你的正则表达式改变\n(\r\n|\r|\n)

+0

谢谢!这解决了它。我以为可能会出现换行问题,但不能提出它的样子。 – Kristen 2011-06-01 01:02:50

0

保持在你的正则表达式\n并打开文件:

input_file= open(filename, 'rU') 

注意模式中的extra U。这将使您的代码即使在其他操作系统上使用,或给定具有“外部”行尾的文件时也能正常工作。

相关问题