【问题标题】:How can I extract that number from string? [closed]如何从字符串中提取该数字? [关闭]
【发布时间】:2013-08-22 11:05:23
【问题描述】:

在字符串实例中,例如:

A Dirty Shame (2004)

最后我有日期。我想将该日期作为数字提取到另一个变量中。我将如何在 python 中解决这个问题?

名字也可以有数字!!

【问题讨论】:

    标签: python regex string-matching


    【解决方案1】:
    import re
    s = 'A Dirty Shame (2004)'
    pattern = r'(?P<year>\d{4})'
    r = re.search(pattern, s)
    n = int(r.group('year'))
    

    仅查找 4 位数字。将字符串转换为整数。

    【讨论】:

    • +1 用于命名组。 9999 年后会发生什么?
    • 9999 年后会发生什么? 0000?
    • r 不会在最后一行工作,除非您将倒数第二行更改为 r = re.search(pattern, s)
    • 是的。我编辑了我的答案。
    【解决方案2】:
    import re
    re.findall('\d+', 'A Dirty Shame (2004)')
    

    【讨论】:

    • 名字开头有数字怎么办
    【解决方案3】:

    您可以使用以下内容:

    import re
    number = int(re.findall('(?<=\()\d+(?=\))', 'A Dirty Shame (2004)')[0]);
    

    或者您可以使用以下命令查找括号之间的所有数字,而无需使用正则表达式:

    [int(s.strip('()')) for s in s.split() if s.strip('()').isdigit()]   
    

    【讨论】:

      【解决方案4】:

      另一个答案,但不使用正则表达式(因为它们通常很慢):

      我会使用 string 中的 split funktion,它在分隔符 (http://docs.python.org/2/library/string.html#string.split) 处拆分字符串,因为您有两个不同的分隔符('(' 和 ')')

      >>> import string
      >>> A = "A Dirty Shame (2004)"
      >>> B = A.split('(')[1].split(')')[0]
      >>> B
      '2004'
      

      请注意,如果字符串中存在任何其他括号,这将不起作用

      【讨论】:

        【解决方案5】:

        查找括号内的所有内容:

        import re
        re.findall('\((.*)\)', 'A Dirty Shame (2004)')[0]
        

        如果标题还包含数字,则此正则表达式将继续有效,例如“回到未来 3 (1986)”)

        【讨论】:

          【解决方案6】:

          你可以使用re.search:

          >>> import re
          >>> s = "A Dirty Shame (2004)"
          >>> myresult =  int(re.search(r'\((.*?)\)', s).group(1))
          >>> print myresult
          2004
          

          .*? 捕获相邻标记内的所有项目。在这种情况下,它获取括号之间的所有内容。 \( 匹配第一个左括号。我们必须将其转义(通过添加反斜杠),因为括号已经是正则表达式中的其他内容 - 分组标记,我们使用它来获取括号之间的所有内容。然后我们在另一边做相反的事情。

          re.search() 如果正则表达式匹配字符串中的任何内容,则返回匹配项。因为它已经这样做了,所以我们在末尾调用.group(1) 以获得年份,2004。

          最后,我们将int() 括在其周围,以将字符串"2004" 转换为整数2004

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-10-04
            • 2017-08-13
            • 1970-01-01
            • 1970-01-01
            • 2020-07-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多