Python中的Python捕获组,带有正则表达式

时间:2018-04-16 05:04:52

标签: python regex

我是python的新手,来自perl的基本知识。 我正在尝试使用正则表达式捕获子字符串。

>>> a='Question 73 of 2943'
>>> import re
>>> re.match("Question.*(\d+)\s+of", a).group(0)
'Question 73 of'
>>> re.match("Question.*(\d+)\s+of", a).group(1)
'3'

我想做的是在小组中抓到73。我假设括号会这样做。

3 个答案:

答案 0 :(得分:1)

.*贪婪。这意味着它将继续匹配任何字符(行终止符除外)0次或更多次。这意味着您设置的(\d+)捕获组永远不会发生。你可以做的是通过添加.*来使?部分变得懒惰,这样你的正则表达式就像......

re.match(r"Question.*?(\d+)\s+of", a)

懒惰和贪婪的正则表达式之间的区别很好地解释了here

答案 1 :(得分:0)

如果您只想捕获73,则可以执行此操作 re.search(r'\d+', a).group()在找到第一场比赛后停止搜索匹配。

答案 2 :(得分:0)

您的。*部分将捕获包含数字的任何字符。最好使用except

Question[^\d]*(\d+)\s+of

应该给你73