Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.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 使用字符串方法format()从字符串中提取值_Python_String - Fatal编程技术网

Python 使用字符串方法format()从字符串中提取值

Python 使用字符串方法format()从字符串中提取值,python,string,Python,String,在python中,我可以执行以下操作: who=“tim” 什么=“蛋糕” 打印“{0}喜欢{1}”。格式(谁,什么) “蒂姆喜欢蛋糕” 然而,逆运算不是那么简单,因为我需要使用正则表达式。我的意思是,解析一个已知结构的字符串,提取我知道它包含的部分,并将它们存储到我的变量中。 我通过以下方式执行此提取: 重新导入 expression=“([a-z]*)喜欢([a-z]*)” 输入\u line=“tim喜欢蛋糕” who,what=re.search(表达式,输入行).groups()

在python中,我可以执行以下操作:

who=“tim”
什么=“蛋糕”
打印“{0}喜欢{1}”。格式(谁,什么)
“蒂姆喜欢蛋糕”

然而,逆运算不是那么简单,因为我需要使用正则表达式。我的意思是,解析一个已知结构的字符串,提取我知道它包含的部分,并将它们存储到我的变量中。 我通过以下方式执行此提取:

重新导入
expression=“([a-z]*)喜欢([a-z]*)”
输入\u line=“tim喜欢蛋糕”
who,what=re.search(表达式,输入行).groups()
这对于少量参数来说已经足够简洁了,但与我的“理想逆”格式()的想法相比,它有两个主要缺点:

  • 提取的参数始终是字符串,它们需要转换为带额外行的浮点值。格式在内部处理从任何值到字符串的转换
  • 我需要为输入和输出定义不同的模板,因为正则表达式形式的输入模板“([a-z]*)likes([a-z]*)”不能在format函数中用于数据的“导出”
所以,我的问题是,是否存在这样一个函数,它会自动解析字符串,并以与我们打印到字符串中相同的方式获取值,遵循几乎相同的语法,如
“{0}喜欢{1}”。提取(谁,什么,输入_line=“tim喜欢蛋糕”)

我知道我可以创建自定义的“提取”函数,该函数的行为符合要求,但如果已经有可用的函数,我不想创建它

who = "tim"
what = "cake"
print "{0} likes {1}".format(who, what)
这是因为您确切地知道字符串中的谁和什么。如果是这样的话,你不需要正则表达式。字符串是字符列表:)

事实上,任何比这更复杂的事情都是自然语言处理,这超出了我的范围

这里有一个想法

import re 

template ="{0} likes {1}"
str_re = r"\w+"
re.search(template.format(str_re, str_re), ...) 

但是,似乎很混乱

除了拆分字符串和强制转换组件或使用
re
之外,似乎没有内置的解决方案

这有点奇怪,因为格式可以用来指定输入的类型:
“{0:03d}{1:f}”。格式(12,1)
给出了
'012_3.000000'
,所以我不确定为什么没有
“012_3.000000”。提取({0:03d}{1:f}),[a,b])
,但是。。也许只有来自C的人才会想要这样的东西


在任何情况下,您都会发现答案中建议的有用信息。

所以。。。自然语言处理?我认为这要简单得多,因为已经给出了模板语句,并且指定了要提取的信息。一个选项是在空格中拆分,并提取模板中用转义字符表示的部分。不过,我还是在寻找现有的选择,而不是自己的选择。
import re 

template ="{0} likes {1}"
str_re = r"\w+"
re.search(template.format(str_re, str_re), ...)