【问题标题】:simple string manipulation in python: extract required numberpython中的简单字符串操作:提取所需的数字
【发布时间】:2014-05-05 16:12:46
【问题描述】:

这是python中的简单字符串操作:

string = '<longitude>-170.794865296</longitude>'

如何提取-170.794865296? 寻找简单易行的方法。

【问题讨论】:

  • 这是 xml 文件的一部分吗?你是怎么得到字符串的?
  • docs.python.org/2/library/re.html 正则表达式应该可以解决问题。
  • 这是我的字符串列表中的一个元素

标签: python xml parsing xml-parsing


【解决方案1】:

您可以使用标准库中的xml.etree.ElementTree

>>> import xml.etree.ElementTree as etree
>>> s = '<longitude>-170.794865296</longitude>'
>>> etree.fromstring(s).text
'-170.794865296'

【讨论】:

    【解决方案2】:

    string.split("&gt;")[1].split("&lt;")[0]

    无需导入任何东西

    【讨论】:

    • +1 我个人喜欢这个解决方案。我确信它非常有效,如果所有字符串都那么简单,那么这是一种非常简单的方法来完成这项工作。不知道为什么投反对票...
    • -0。如果字符串不是您所期望的,这可能会静默失败,并且该错误将被隐藏或难以追踪。
    【解决方案3】:
    import re
    print re.findall(r'[-0-9.]+', '<longitude>-170.794865296</longitude>')
    

    【讨论】:

    • +1,但请修正缺少的负号。通常,您不应该使用正则表达式来解析标记数据,但如果您只是提取一些标记数字,它应该没问题。任何更复杂的事情都应该用解析器来完成(比如xml.etree.ElementTree)。
    【解决方案4】:

    如果你的数字都使用'&lt;longitude&gt;...&lt;/longitude&gt;'标签格式化,那么你可以只使用字符串切片:

    start = len('<longitude>')
    end = -len('</longitude>')
    print float('<longitude>-170.48738723</longitude>'[start:end])
    

    【讨论】:

      【解决方案5】:

      使用解析模块

      $ pip install parse
      

      用简洁给你留下深刻印象:

      >>> from parse import parse
      >>> parse("<lon>{:f}</lon>", "<lon>-170.794865296</lon>").fixed[0]
      -170.794865296
      

      一步一步解释

      >>> from parse import parse
      >>> text = '<lon>-170.794865296</lon>'
      >>> templ = "<lon>{:f}</lon>"
      >>> res = parse(templ, text)
      >>> res
      <Result (-170.794865296,) {}>
      >>> res.fixed[0]
      -170.794865296
      >>> type(res.fixed[0])
      float
      

      为字典键赋值:

      >>> parse("<lon>{pnt_lat:f}</lon>", "<lon>-170.794865296</lon>").named["pnt_lat"]
      -170.794865296
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-10
        • 2012-05-09
        • 1970-01-01
        • 2015-06-14
        • 2012-07-06
        • 1970-01-01
        相关资源
        最近更新 更多