如何从字符串中提取该数字?

时间:2013-08-22 11:05:23

标签: python regex string-matching

在字符串实例中:

A Dirty Shame (2004)

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

名字上也可以有一个数字!!

6 个答案:

答案 0 :(得分:3)

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 :(得分:1)

import re
re.findall('\d+', 'A Dirty Shame (2004)')

答案 2 :(得分:1)

您可以使用以下内容:

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

或者您可以使用以下内容查找括号中的所有数字,无论它们在字符串中的哪个位置,而不使用正则表达式:

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

答案 3 :(得分:1)

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

我会使用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'

请注意,如果字符串

中存在任何其他括号,则此操作无效

答案 4 :(得分:0)

查找括号内的所有内容:

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

如果标题还包括数字,例如“回到未来3(1986)”,那么这个正则表达式将继续有效。

答案 5 :(得分:0)

您可以使用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