擅长:python、mysql、java
<p>你很想把一个模板变成一个正则表达式来读取这个模板,对吧?这并不总是可行的,例如,如果你有一个模板<code>"$x$y"</code>和一个字符串<code>"abc"</code>,你就不知道它是<code>("ab", "c")</code>,<code>("abc", "")</code>还是其他情况。不仅仅是模板变量彼此相邻。在</p>
<p>所以,如果你想要这样的东西,你必须知道你输入的字符串中有什么。也就是说,变量之间有一些字符,这些字符不会出现在变量本身中(即变量都是数字,模板中它们之间有分号)。如果您只是解析一些输入,那么如果您只编写自己的regex可能会更安全。在</p>
<p>也就是说,你可以这样做:</p>
<pre><code>class TemplateX(Template):
def getvalues(self,Str):
""" Reads a string matching the template to find the original values.
>>> temp = TemplateX("Blah: $xx;$y;")
>>> newsting = temp.substitute(xx="1",y="2")
>>> temp.getvalues(newstring)
('1', '2')
"""
regex = re.sub(self.pattern, "(.*)", self.template)
m = re.match(regex, Str)
return m.groups()
</code></pre>
<p>它使用模板自己的机制来查找占位符,并用正则表达式通配符替换它们。然后在给定的字符串上运行regex。在</p>
<p>您还可以尝试获取初始关键字参数:</p>
^{pr2}$
<p>然后用:</p>
<pre><code>temp = TemplateX("$a$a")
newstring = temp.substitute(a='a')
print temp.getvalues(newstring)
</code></pre>