【发布时间】:2011-09-05 21:39:00
【问题描述】:
我需要从多个文件中删除一段代码,这些文件的开头如下:
<?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'
我可以确认最后一个代码中的“文本”实际上是一个字符串,并且确实包含问题代码,但是 removeInsert() 代码似乎不适用于这个字符串。我最好的猜测是它与我在手动将字符串输入到 removeInsert() 时所做的三重引号有关。也许 fileRW() 传递给 removeInsert() 的文本不是三引号(我尝试了不同的方法来强制它使用三引号(添加了“\”\“\”“),但这不起作用) 。不过,我不知道如何解决这个问题,并且在我的谷歌搜索中找不到任何关于它的信息。有什么建议吗?
【问题讨论】:
标签: python regex string file-io quotes