我是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。我假设括号会这样做。
答案 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