在三个单词之一后抓取数字

时间:2014-11-21 02:21:54

标签: python regex

我想抓住三个单词之一后显示的数字,如下例所示:

x1 = Break, Staffel 1, Part 2 # 1
x2 = Seinfeld, Season 11 # 11
x3 = Friends, Saison 4 # 4

这是我到目前为止所做的:

re.split(', ((Staffel)|(Season)|(Saison)) ', x)[-1]

虽然它仅在数字位于字符串末尾时才有效。什么是更好的方式来做到这一点?

2 个答案:

答案 0 :(得分:4)

使用re.search(),而不是re.split()。然后,您可以使用捕获组来获取单词后面的数字。

m = re.search(r', (?:Staffel|Season|Saison) (\d+)', x);
if (m):
    digits = m.group(1)

我在第一组中使用?:,因为您不需要捕获单词,分组仅用于替换。

\d匹配一个数字,+匹配前面RE中的至少一个,因此匹配任何长度数。

答案 1 :(得分:1)

您可以尝试re.findall

>>> re.findall("(?:Staffel|Season|Saison)\s(\d+)",x1)
['1']

如果你想捕捉单词:

>>> re.findall("(Staffel|Season|Saison)\s(\d+)",x1)
[('Staffel', '1')]