Python使用正则表达式从字符串中捕获组

标签 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。我认为括号可以做到这一点。

最佳答案

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

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

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

关于Python使用正则表达式从字符串中捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49849936/

相关文章:

javascript - 使用正则表达式替换javascript中的情绪字符

regex - Pcregrep 包含文件扩展名错误

java - 正则表达式对于全名没有按预期工作

python - 开罗:在 x 和 y 中绘制从 0 到 1 的空间中的所有内容,并且仅在最后重新缩放到特定分辨率(可调整大小的窗口)

python - Python中继承的抽象类上的`__subclasshook__`?

python - 是否提供包含英文单词(包括频率)的列表?

objective-c - [NSRegularExpression stringByReplacingMatchesInString] 的意外行为

c# - 看似无辜的 .NET 正则表达式使页面响应时间增加 10 倍

python - python 中的 Bash 参数

python - 使用 scipy 的各种稀疏矩阵乘积的性能