【问题标题】:Use string method format() to extract values from string使用字符串方法 format() 从字符串中提取值
【发布时间】: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")

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

【问题讨论】:

  • 那么...自然语言处理?
  • 我觉得这样简单多了,因为给出了模板语句,指定了要提取的信息。一种选择是在空格中拆分,并提取模板中带有转义字符的部分。但同样,我正在寻找现有的选项,而不是自己做。

标签: python string


【解决方案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

事实上,比这更复杂的是自然语言处理,这将超出我的范围。

【讨论】:

    【解决方案2】:

    这是一个想法。

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

    虽然看起来很乱

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-01
        • 2015-05-10
        • 2017-01-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多