【发布时间】:2016-07-22 14:04:10
【问题描述】:
在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()
这对于少量参数来说已经足够简洁了,但与我对 format() 的“理想逆”的想法相比,它有两个主要缺点:
- 提取的参数始终是字符串,需要将它们转换为带有额外行的浮点数。 Format 在内部处理所需的转换,从任何值到字符串。
- 我需要为输入和输出定义不同的模板,因为正则表达式形式“([a-z]*)喜欢([a-z]*)”的输入模板不能用于“导出”数据,在格式函数中。
所以,我的问题是,是否存在这样的函数,它会自动解析字符串并获取值,就像我们将它们打印到字符串一样,遵循几乎相同的语法,如
"{0} 喜欢 {1}".extract(who,what,input_line="tim likes cake")
我知道我可以创建我的自定义“提取”函数,它的行为符合需要,但如果已经有一个可用的,我不想创建它。
【问题讨论】:
-
那么...自然语言处理?
-
我觉得这样简单多了,因为给出了模板语句,指定了要提取的信息。一种选择是在空格中拆分,并提取模板中带有转义字符的部分。但同样,我正在寻找现有的选项,而不是自己做。