如何在Python中匹配和提取正则表达式中的组?

时间:2015-12-11 05:27:32

标签: python regex

我有一个程序,我从用户那里接受输入。

我希望能够检测用户何时说出如下内容:

“将HP 25设置为9999”

然后使用正则表达式提取25和9999。

是吗:

if re.match(r"^Set HP ([\d]+) to ([\d]+)$", userstring)

如果是这样,我如何使用正则表达式提取用户输入的两个数字?

3 个答案:

答案 0 :(得分:4)

使用matchobj.groups

m = re.match(r"^Set HP (\d+) to (\d+)$", userstring)
if m:
    print m.groups()

示例:

>>> m = re.match(r"^Set HP (\d+) to (\d+)$", "Set HP 25 to 9999")
>>> if m:
    print m.groups()


('25', '9999')
>>> 

答案 1 :(得分:1)

您可以使用re.findall

>>> s = "Set HP 25 to 9999"
>>> re.findall('\d+', s)
['25', '9999']

或手动提取组:

>>> match = re.match(r"^Set HP (\d+) to (\d+)$", s)
>>> match.group(1)
'25'
>>> match.group(2)
'9999'

请注意match.groups()会将所有群组作为元组:

>>> match.groups()
('25', '9999')

答案 2 :(得分:0)

你也可以迭代地找到这些数字:

for m in re.finditer(r"\d+",userstring):
   print m.group()