正则表达式贪婪与非贪婪匹配详解:如何选择尽量多或少的字符

正则表达式贪婪和非贪婪

正则表达式贪婪与非贪婪匹配详解:如何选择尽量多或少的字符

正则表达式是用于匹配字符串的一种语言,在编程领域经常被使用。正则表达式有两种匹配方式,即贪婪和非贪婪。贪婪方式在匹配时会选择尽量多的匹配字符,而非贪婪方式则会选择尽量少的匹配字符。

贪婪匹配

贪婪匹配指的是在进行匹配时,会以尽可能多地匹配字符的方式来进行。例如在正则表达式里使用“.*”,它能够匹配任意数量的任意字符,其中也包括空字符。

import re
hello 包含 abc 。abc 又出现在 abcdefg 中。abc 还在 abcdefghijklmn 里。
pattern = "abc.*"
使用 re 模块的 findall 函数来查找 pattern 在 text 中的所有匹配项,将结果赋值给 match 。
print(match)
Output 包含了三个部分,分别是 'abc'、'abcdefg' 和 'abcdefghijklmn'。

代码中利用 re.findall()方法来对文本展开匹配,其 pattern 为“abc.*”,意思是匹配起始为“abc”,接着包含任意数量的任意字符。

运行结果输出了整个文本字符串。因为在默认情况下,正则表达式是贪婪匹配的,它会选择尽量多的匹配字符。

import re
text = "hello abc abcdefg abcdefghijklmn"
pattern = "abc.*n"
match = re.findall(pattern, text)
print(match)
输出内容为:['abcdefg', 'abcdefghijklmn']

另外,在指定匹配字符的范围时,是采用贪婪匹配的方式。比如,当我们要进行这样的匹配,即从“a”开始,其后包含若干个“a”或者“b”,最后匹配到一个“c”,其代码如下:

import re
text = "aabbbccc"
pattern = "a[a|b]*c"
match = re.findall(pattern, text)
print(match)
# Output: ['aabbbcc']

可以看到,输出结果呈现为“aabbbcc”的形式。在这个结果中,匹配到了若干个“a”或者“b”。并且,一直持续到最后一个字符为“c”才结束。

非贪婪匹配

非贪婪匹配指的是在匹配过程中,会以尽可能少地匹配字符的方式来进行。在正则表达式里,能够通过使用“.*?”来实现非贪婪匹配。比如:

import re
text = "hello abc abcdefg abcdefghijklmn"
pattern = "abc.*?"
match = re.findall(pattern, text)
print(match)
输出内容为:['abc ', 'abcdefg ', 'abcdefghijklmn'] ,即包含了三个字符串,分别是 'abc '、'abcdefg ' 和 'abcdefghijklmn' 。

在代码里,pattern 是“abc.*?”,这意味着要匹配以“abc”开头且后面有任意数量任意字符的内容,并且在匹配过程中会选择尽量少的匹配字符。其输出结果有三个,分别是“abc ”、“abcdefg ”、“abcdefghijklmn”。

再看一个例子,当指定匹配字符的范围时,若采用非贪婪匹配,就会选取尽可能少的字符。代码如下:

import re
text = "aabbbccc"
pattern = "a[a|b]*?c"
match = re.findall(pattern, text)
print(match)
# Output: ['abc']

输出的结果是“abc”,这里仅有一个匹配结果,在选择“a”或“b”时尽量少选,最终匹配到了第一个“c”。

结论

正则表达式的贪婪匹配和非贪婪匹配的区别在于,要在尽可能多地匹配字符和尽可能少地匹配字符之间做出选择。在编程过程中,需要依据实际的应用场景,来挑选合适的匹配方式。倘若需要选取尽量少的匹配字符,那么就可以在正则表达式里使用“.*?”来进行非贪婪匹配。

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

31阅读

外国教程python,python编程教学视频

2026年09月02日

25阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

26阅读

python教程大全集,python教程600集

2026年09月02日

26阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

22阅读