使用string method format()从字符串中提取值

2024-06-02 10:16:24 发布

您现在位置:Python中文网/ 问答频道 /正文

在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]*)likes([a-z]*)”不能用于数据的“导出”。你知道吗

所以,我的问题是,是否存在这样一个函数,它会自动解析字符串,并以打印到字符串的相同方式获取值,遵循几乎相同的语法,如
{0}喜欢{1}.extract(谁,什么,输入_line=“tim喜欢蛋糕”)

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


Tags: 函数字符串re模板format参数lineextract
3条回答
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

事实上,任何比这更复杂的事情都是自然语言处理,这将超出我的范围。你知道吗

除了拆分字符串和强制转换组件或使用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答案中所建议的那样。你知道吗

有个主意。你知道吗

import re 

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

不过,看起来很乱

相关问题 更多 >