匹配给定模式后面的第二个数字

时间:2015-07-08 22:36:16

标签: python regex

我有这种字符串

hello 45 blabla 12 100 code 45 13 093bb 

我想匹配关键字code后面的第二个数字(使用Python)。在此示例中,应返回"13"

这是我找到的解决方案

s = "hello 45 blabla 12 100 code 45 13 093bb "
re.search("code \d+ \d+",s).group(0).split(" ")[-1]
# '13'

它有效,但可能有更好的解决方案。我尝试过使用lookbehind但是我遇到了python不能容忍欠定长度的问题的问题(我不知道code后面的第一个数字中的位数)。我试过了

re.search("(?<=code \d+)\d+",s).group(0)
# raise error, v # invalid expression
# sre_constants.error: look-behind requires fixed-width pattern

4 个答案:

答案 0 :(得分:3)

你可以一起跳过re

>>> a = s.split()
>>> a[a.index('code') + 2]
'13'

答案 1 :(得分:1)

通过将所需的值放入组中,可以使其更清晰。

>>> re.search("code \d+ (\d+)",s).group(1)
'13'

答案 2 :(得分:1)

re.search("code \d+ (\d+)", s).group(1) 

应该有效。 ()括号标识要捕获的组。 组0是整个文本,以下是按顺序编号的组。

答案 3 :(得分:1)

这比re.search解决方案稍短:

re.findall('code \d+ (\d+)', s)

它将仅返回与()

中定义的组匹配的内容