Python正则 问号 ? 零次或一次匹配 非贪婪匹配

在正则表达式中,问号(?)有两种不同的用法:

1、零次或一次匹配:将问号放在一个字符或表达式后面,表示该字符或表达式可以出现零次或一次。

例如,正则表达式colou?r可以匹配colorcolour两种拼写形式的单词。

2、非贪婪匹配:在一个重复表达式后面紧跟着问号,表示非贪婪匹配,也就是说,它会尽可能少地匹配。

例如,正则表达式 a+?b 将会匹配尽可能少的连续的字母 a,直到遇到 b 为止。

例如,对于字符串 aaabbb,使用该正则表达式,它只会匹配 aab,而不是匹配整个字符串。

在第一个例子中,pattern = "a+b",这表示匹配一个或多个连续的"a",后面紧跟着一个"b"。所以,re.findall(pattern, text)会返回一个列表,其中包含所有匹配的子串。在你的例子中,它返回['aaab'],因为"aaab"是满足模式的唯一子串。

在第二个例子中,pattern = "a+?b",这表示匹配尽可能少的连续的"a",后面紧跟着一个"b"。这是"贪婪"模式与"惰性"模式之间的区别。"贪婪"模式会尽可能多地匹配字符,而"惰性"模式则尽可能少地匹配字符。然而,在这个例子中,由于"a"的数量是3,这是最少可能的数量,所以结果仍然返回['aaab']

需要注意的是,问号的作用范围是紧跟在它后面的表达式或字符,如果要表示问号本身的字面意义,需要使用转义字符(\?)。

正则表达式在线测试工具
人工服务

正则表达式付费代写、咨询、答疑解惑,专业、快速、高效帮您解决正则表达式方面的各种问题,可定制各类软件应用程序。

联系客服
正则表达式基础语法
. - 除换行符以外的所有字符。
^ - 字符串开头。
$ - 字符串结尾。
\d,\w,\s - 匹配数字、字符、空格。
\D,\W,\S - 匹配非数字、非字符、非空格。
[abc] - 匹配 a、b 或 c 中的一个字母。
[a-z] - 匹配 a 到 z 中的一个字母。
[^abc] - 匹配除了 a、b 或 c 中的其他字母。
aa|bb - 匹配 aa 或 bb。
? - 0 次或 1 次匹配。
* - 匹配 0 次或多次。
+ - 匹配 1 次或多次。
{n} - 匹配 n次。
{n,} - 匹配 n次以上。
{m,n} - 最少 m 次,最多 n 次匹配。
(expr) - 捕获 expr 子模式,以 \1 使用它。
(?:expr) - 忽略捕获的子模式。
(?=expr) - 正向预查模式 expr
(?!expr) - 负向预查模式 expr

在线客服QQ:543690914,备案号: 苏ICP备15037649号-32。东海县白塔埠镇佳诚电脑经营部版权所有。