在python中,我可以执行以下操作:
who = "tim"
what = "cake"
print "{0} likes {1}".format(who, what)
屈服"蒂姆喜欢蛋糕"。
然而,逆操作并不那么简单,因为我需要使用正则表达式。我的意思是,解析一串已知结构并提取我知道它包含的部分,并将它们存储到我的变量中。 这个提取我执行:
import re
expression = "([a-z]*) likes ([a-z]*)"
input_line = "tim likes cake"
who, what = re.search(expression, inputline).groups()
这对于少量参数来说足够整洁,但与我对#34;理想逆转"的想法相比,它有两个主要的缺点。格式化():
所以,我的问题是,是否存在这样的函数,它会自动解析字符串并获取值,就像我们将它们打印到字符串一样,遵循几乎相同的语法,如
" {0}喜欢{1}" .extract(who,what,input_line =" tim喜欢蛋糕")
我知道我可以创建我的自定义" extract"功能符合要求,但如果已经有一个功能,我不想创建它。
答案 0 :(得分:1)
who = "tim"
what = "cake"
print "{0} likes {1}".format(who, what)
这很有效,因为您确切知道字符串中的人和位置。如果是这种情况,则不需要正则表达式。字符串是字符列表:)
def extract_who_what_from_string(string):
words = string.split(" ")
who = words[0]
what = words[-1]
return who, what
事实上,比这更复杂的是自然语言处理,并且非常不在我的范围之内。
答案 1 :(得分:1)
这是一个想法。
import re
template ="{0} likes {1}"
str_re = r"\w+"
re.search(template.format(str_re, str_re), ...)
虽然看起来很混乱
答案 2 :(得分:1)
除了拆分字符串和转换组件或使用re
之外,似乎没有内置解决方案。
这有点奇怪,因为格式可以用来指定输入上的类型:"{0:03d}_{1:f}".format(12, 1)
给出'012_3.000000'
,所以我不确定为什么没有"012_3.000000".extract("{0:03d}_{1:f}", [a, b])
,但是...也许只有来自C的人才会想要这样的事情。
在任何情况下,您都会发现parse module有用,如this回答中所述。