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

时间:2016-07-22 14:04:11

标签: python string

在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;理想逆转"的想法相比,它有两个主要的缺点。格式化():

  • 提取的参数总是字符串,需要将它们转换为带有额外行的浮点数。格式在内部处理所需的转换,从任何值到字符串。
  • 我需要为输入和输出定义不同的模板,因为正则表达式形式的输入模板"([a-z] *)喜欢([a-z] *)"不能重复用于"导出"数据的格式,函数。

所以,我的问题是,是否存在这样的函数,它会自动解析字符串并获取值,就像我们将它们打印到字符串一样,遵循几乎相同的语法,如
" {0}喜欢{1}" .extract(who,what,input_line =" tim喜欢蛋糕")

我知道我可以创建我的自定义" extract"功能符合要求,但如果已经有一个功能,我不想创建它。

3 个答案:

答案 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回答中所述。