【问题标题】:Split string and just get number in python?拆分字符串并在python中获取数字?
【发布时间】:2011-05-31 23:41:24
【问题描述】:

我有一个像"GoTo: 7018 6453 12654\n" 这样的字符串,我只想得到类似['7018', '6453', '12654'] 的数字,我尝试使用正则表达式,但我无法拆分字符串来获取数字,这是我的代码:

样本 1:

splitter = re.compile(r'\D');
match1 = splitter.split("GoTo: 7018 6453 12654\n")

my output is: ['', '', '', '', '', '', '', '', '7018', '6453', '12654', '']

示例 2:

splitter = re.compile(r'\W');
match1 = splitter.split("GoTo: 7018 6453 12654\n")

my output is: ['GoTo', '', '7018', '6453', '12654', '']

【问题讨论】:

    标签: python string split


    【解决方案1】:

    如果您的所有数字都是正整数,您可以使用isdigit() 方法在不使用正则表达式的情况下做到这一点:

    >>> text = "GoTo: 7018 6453 12654\n"
    >>> [token for token in text.split() if token.isdigit()]
    ['7018', '6453', '12654']
    

    【讨论】:

    • +1 表示非重新。如果以后需要,也可以轻松地将int(item) 扔进去。
    • Did some timeit... 如果 split+isdigit 是基值(它是最快的),编译的 re.findall 慢 1.5 倍,未编译的 re.findall 2.5。
    • 这只有在分隔符是纯空格时才有效(例如,即使是 "1, 2, 3" 也会破坏它)
    • @6502, true,但如果不是纯空格,您可以在split() 的第一个参数中指定分隔符。
    • 关键在于您如何阅读问题。通过“我有一个类似的字符串”,我认为对“喜欢”假设过于严格的含义是不明智的,所以在我看来,分隔符是除数字之外的所有内容(“我只想得到数字”)并且拆分可以'不要这样做......这使得问题成为re的工作。显然,由于我不明白的原因,不使用 re 是一个加号……现在我们有了另一个想要成为 python 程序员的人,他会编写糟糕的易碎代码,而不是学习如何使用正则表达式。
    【解决方案2】:
    >>> import re
    >>> re.findall("[0-9]+", "GoTo: 7018 6453 12654\n")
    ['7018', '6453', '12654']
    >>> 
    

    【讨论】:

      【解决方案3】:
      >>> re.findall(r'\d+', 'GoTo: 7018 6453 12654\n')
      ['7018', '6453', '12654']
      

      【讨论】:

        【解决方案4】:

        您可以按照示例 1 中的当前方法以及此代码:

        filter (lambda a: a != '', match1)
        

        【讨论】:

          【解决方案5】:

          试试这个:

          import re
          splitter = re.compile(r'\d+')
          match1 = splitter.findall("GoTo: 7018 6453 12654\n")
          print match1
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-01
            • 2020-03-24
            • 2015-04-21
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多