我有一段代码需要从多个文件中删除,如下所示:
<?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(“”“[file text]”“”)调用它时,这个程序工作得很好 - 三重引号允许它作为多行读入。
我试图扩展它来打开一个文件并将文件的字符串内容传递给removeInsert():
def fileRW(filename):
input_file = open(filename, 'r')
text = input_file.read()
newText = removeInsert(text)
...
但是,当我运行fileRW([input-file])时,我收到此错误:
return text[:m.start()] + text[m.end():]
AttributeError: 'NoneType' object has no attribute 'start'
我可以确认最后一个代码中的“text”实际上是一个字符串,并且确实包含问题代码,但似乎removeInsert()代码对此字符串不起作用。我最好的猜测是,它与我在手动将字符串输入removeInsert()时的三重引用有关。也许fileRW()传递给removeInsert()的文本不是三引号(我尝试了不同的方法强制它有三引号(“\”\“\”“添加”),但这不起作用)我不知道如何解决这个问题,但在谷歌搜索中找不到任何相关信息。有什么建议吗?
答案 0 :(得分:1)
您的正则表达式仅使用\n
作为行。您的文本编辑器可能会插入回车符和换行符组合:\r\n
。尝试将正则表达式中的\n
更改为(\r\n|\r|\n)
。
答案 1 :(得分:0)
将\n
保留在正则表达式中,然后将文件打开为:
input_file= open(filename, 'rU')
注意模式中的extra U。这将允许您的代码即使在其他操作系统上使用,也可以使用具有“外部”行尾的文件。