我喜欢python的一切,主要是因为它的简单。我觉得正则表达式已经让我远离了对python的热爱。因此,我想扩展已经存在的字符串模板类,它允许我在字符串中设置变量,以便可以获取已存在字符串的值。在
我的第一次尝试效果不错,但也有一些缺点:
import re
from string import Template
class TemplateX(Template):
def getvalues(self,Str):
regex = r""
skipnext = False
for i in self.template:
if skipnext == False:
if i != "$":
regex += i
else:
regex += r"(.+)"
skipnext = True
else:
skipnext = False
values = re.search(regex,Str).groups()
return values
temp = TemplateX(" Coords; $x;$y;$z;\n")
newstring = temp.substitute(x="1",y="2",z="3")
print newstring
values = temp.getvalues(newstring)
print values
newstring打印为:“Coords;1;2;3;\n”
值打印为:(“1”,“2”,“3”)
对于这种更简单的方法,我很乐意失去re的一些功能。 我的问题是如何在getvalues中添加更多的功能,以允许TemplateX中的变量超过1个字符(比如Template类和substitute allows)。i、 e.因此,这项工作:
^{pr2}$
你很想把一个模板变成一个正则表达式来读取这个模板,对吧?这并不总是可行的,例如,如果你有一个模板
"$x$y"
和一个字符串"abc"
,你就不知道它是("ab", "c")
,("abc", "")
还是其他情况。不仅仅是模板变量彼此相邻。在所以,如果你想要这样的东西,你必须知道你输入的字符串中有什么。也就是说,变量之间有一些字符,这些字符不会出现在变量本身中(即变量都是数字,模板中它们之间有分号)。如果您只是解析一些输入,那么如果您只编写自己的regex可能会更安全。在
也就是说,你可以这样做:
它使用模板自己的机制来查找占位符,并用正则表达式通配符替换它们。然后在给定的字符串上运行regex。在
您还可以尝试获取初始关键字参数:
^{pr2}$然后用:
将UserString用于超级类http://docs.python.org/library/userdict.html#module-UserString
相关问题 更多 >
编程相关推荐