字符串中的Python捕获组,带有正则表达式
我是python新手,掌握了perl的基本知识。 我试图用正则表达式捕获一个子字符串字符串中的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' 我想做的是在小组中
>>> 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
。