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

字符串中的Python捕获组,带有正则表达式,python,regex,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' 我想做的是在小组中

我是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个。我假设括号可以这样做。

如果您只想捕获
73
,您可以这样做
re.search(r'\d+',a).group()
在找到第一个匹配项后停止搜索匹配项。

您的。*部件将捕获包含数字的任何字符。最好使用除之外的

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

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

re.match(r"Question.*?(\d+)\s+of", a)
惰性正则表达式和贪婪正则表达式之间的区别得到了很好的解释

操作符
*
是贪婪的。改用
*?
。或者,更好的做法是在数字之前的正则表达式中插入一个
\s