Python:匹配带有特殊字符和空格的长字符串,然后在开头添加两个字符
Posted
技术标签:
【中文标题】Python:匹配带有特殊字符和空格的长字符串,然后在开头添加两个字符【英文标题】:Python: match a long string with special characters and white spaces and then prepend two characters to the beginning 【发布时间】:2012-02-23 15:48:22 【问题描述】:我不知道如何解决这个问题,我试图在一个包含大量空格和特殊字符的文本文件中匹配这个长字符串,并将这些字符附加到前面,即。 "//"
我需要匹配这一行:
$menu_items['gojo_project'] => array('http://www.gojo.net/community/plugin-inventory/ops-gojo/gojo', 'gojo',3),
把它变成这样:
//$menu_items['gojo_project'] => array('http://www.gojo.net/community/plugin-inventory/ops-gojo/gojo', 'gojo',3),
请注意,我只是在前面添加了两个“/”字符。
我尝试使用 re.escape 格式化字符串,但它真的很长并且仍然抛出语法错误。我是否以正确的方式使用're'?或者有没有更好的pythonic方法来匹配文本文件中这样的字符串并添加到它的前面?
编辑:忘了提到我需要在线编辑文件。简而言之,它是一个很长的 php 脚本,我试图找到该行并将其注释掉(即。//)。所以,我不能真正使用一些建议的解决方案(我认为),因为他们已经将修改写入单独的文件。
【问题讨论】:
如果它只是这个 exact 字符串你可以做str.replace('your_string', '// your_string')
看起来你正在解析 php.ini 文件。是对的吗?正则表达式可能不是这里的正确答案。
@Daenyth :是的,这是正确的。这是一个 PHP 脚本。
【参考方案1】:
试试fileinput
,它会让你读取文件并在原地重写行:
import fileinput
for line in fileinput.input("myfile.txt", inplace = 1):
if line == "$menu_items['gojo_project'] => array('http://www.gojo.net/community/plugin-inventory/ops-gojo/gojo', 'gojo',3),":
line = '//' + line
print line,
【讨论】:
奇怪,当我运行它时,文件变为空,即。空 我很抱歉,inplace = 1,不是真的。现在就试一试吧。 谢谢彼得,这行得通。我稍微改变了它以匹配“包含”,因为我无法获得完全匹配的工作。 IE。如果“某些字符串”在行中:【参考方案2】:如果您想完全匹配该字符串,使用字符串相等运算符而不是正则表达式会更容易。
longString = "$menu_items['gojo_project'] => array('http://www.gojo.net/community/plugin-inventory/ops-gojo/gojo', 'gojo',3),"
input = open("myTextFile.txt", "r")
output = open("myOutput.txt", "w")
for line in input:
if line.rstrip() == longString: #rstrip removes the trailing newline/carriage return
line = "//" + line
output.write(line)
input.close()
output.close()
【讨论】:
以上是关于Python:匹配带有特殊字符和空格的长字符串,然后在开头添加两个字符的主要内容,如果未能解决你的问题,请参考以下文章