Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 模板删除了双字符串$_Python - Fatal编程技术网

Python 模板删除了双字符串$

Python 模板删除了双字符串$,python,Python,我正在使用string.Template.safe\u替换。。。用给定的字典替换字符串中的键。这些字符串可能包含双$字符,我不想替换它们,因为它们不是键 给出以下示例: >>> Template("foo$$bar").safe_substitute({"key":"val"}) 'foo$bar' 实际上,我希望字符串不会更改,因为字典中的键与给定字符串中的任何$key都不匹配,并且该函数的文档说明: 原始占位符将完整地显示在结果字符串中。此外,和替换不同,美元的任何其他外

我正在使用string.Template.safe\u替换。。。用给定的字典替换字符串中的键。这些字符串可能包含双$字符,我不想替换它们,因为它们不是键

给出以下示例:

>>> Template("foo$$bar").safe_substitute({"key":"val"})
'foo$bar'
实际上,我希望字符串不会更改,因为字典中的键与给定字符串中的任何$key都不匹配,并且该函数的文档说明:

原始占位符将完整地显示在结果字符串中。此外,和替换不同,美元的任何其他外观都将返回美元,而不是引发ValueError

但取而代之的是,其中一美元被移除。为什么呢

string.Template类在内部使用正则表达式来解析模板参数:

正则表达式似乎只是不支持那些可以理解的双美元符号,因为它们是保留的模板标记

一个可行的解决方案是用一些不太可能出现在你手里的东西来代替你的双倍美元:

Template("foo$$bar".replace("$$", "DOUBLE_DOLLAR")).safe_substitute(...).replace("DOUBLE_DOLLAR", "$$")
Template类在内部使用正则表达式来解析模板参数:

正则表达式似乎只是不支持那些可以理解的双美元符号,因为它们是保留的模板标记

一个可行的解决方案是用一些不太可能出现在你手里的东西来代替你的双倍美元:

Template("foo$$bar".replace("$$", "DOUBLE_DOLLAR")).safe_substitute(...).replace("DOUBLE_DOLLAR", "$$")
正如政府所说:

$$是一种逃避;它被替换为一个美元

如果你想保留2美元,你需要逃避两次:

>>> Template("foo$$$$bar").safe_substitute({"key":"val"})
'foo$$bar'
正如政府所说:

$$是一种逃避;它被替换为一个美元

如果你想保留2美元,你需要逃避两次:

>>> Template("foo$$$$bar").safe_substitute({"key":"val"})
'foo$$bar'

解析器看到$$并在发现$bar不是有效键之前将其替换为$。这使得$$的处理在没有严格必要的情况下保持一致

解析器看到$$并在发现$bar不是有效键之前将其替换为$bar。这使得$$的处理在没有严格必要的情况下保持一致

哦,天哪,我总是读函数定义,但总是漏掉上半部分。哦,天哪,我总是读函数定义,但总是漏掉上半部分。