正则表达式非贪婪模式详解

正则表达式(non-greedy mode)指的是正则表达式中的量词尽可能地匹配更少的字符。本文将从多个方面详细阐述正则表达式非贪婪模式,并为你提供相关的代码示例。

一、正则非贪婪模式怎样表示

要想开启正则表达式非贪婪模式,需要在量词后面添加“?”。在Java、Python等编程语言中,可以在量词后面添加“?”,例如:


import re
# 将贪婪模式转为非贪婪模式
str = 'aacc
ee' str_list = re.findall(r"", str) print(str_list) # ['', '
']

在上述代码中,r””中的问号就代表了非贪婪模式。这个正则表达式的匹配结果为[”, ‘

‘],只匹配一个尖括号内的内容。

二、正则贪婪匹配

在正则表达式中,默认情况下,量词是贪婪的。这意味着量词“*”、“+”、“?”、“{n,}”、“{n,m}”尽可能匹配多的字符。例如,正则表达式将匹配整个字符串“百度”,因为“.*”被解释为所有字符的重复的0次或多次。因此,非贪婪模式将尽量少地匹配字符。

三、正则表达式里非贪婪模式

正则表达式里的非贪婪模式可以解决一些量词匹配过多字符的问题。例如,在下面的字符串“TitleMain Text”中,如果运用贪婪模式,用正则表达式匹配“”时,会匹配整个字符串。但是如果运用非贪婪模式开启“”,则可以将这个字符串分段匹配。我们可以使用Python中的re模块实现如下:


import re

string = "TitleMain Text"
GreedyRegex = re.compile(r'')      # 贪婪模式
Results = GreedyRegex.findall(string)   # ['TitleMain Text']
NonGreedyRegex = re.compile(r'')   # 非贪婪模式
Results2 = NonGreedyRegex.findall(string)  # ['', '', '', '', '', 'Main Text', '']

在上述代码中,我们创建了两个正则表达式实例,分别用贪婪模式和非贪婪模式匹配字符串。我们可以看到第一个正则表达式实例返回了完整的字符串,而第二个正则表达式实例则将字符串分解成了多个段落。

四、正则中的非贪婪模式怎么表达

在正则表达式中,非贪婪模式可以使用“?”来表示。当量词后面跟着“?”时,它会尽量匹配最少的字符,而不是最多的字符,这就是非贪婪模式。

五、正则表达式贪婪模式代码


import re

str = "abc123abc456"
patt1 = "\d+"
patt2 = "\d+?"
res1 = re.findall(patt1,str)
res2 = re.findall(patt2,str)
print('贪婪模式匹配结果:',res1)      # ['123', '456']
print('非贪婪模式匹配结果:',res2)   # ['1', '2', '3', '4', '5', '6']

在上述代码中,“\d+”代表贪婪模式,它会尽可能多地匹配数字。而“\d+?”代表非贪婪模式,它会尽量少地匹配数字。因此,贪婪模式的输出结果是[‘123’, ‘456’],而非贪婪模式的输出结果是[‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’]。

六、正则表达式非贪婪匹配

非贪婪匹配是一种匹配方法,在这种方法中,文本被尽可能少地匹配,以保证最小化匹配范围。如前所述,可以使用“?”后缀来强制其执行非贪婪匹配。

例如,在Python中使用re模块进行非贪婪匹配时,可以将?添加到特定字符后面,以执行非贪婪匹配。例如,在下面的代码中,使用正则表达式匹配字符串“find and save the http://www.google.com,and another3323”,运用非贪婪模式可以分别匹配链接和文本,如下:


import re

str="3323find and save the http://www.google.com,and another3323"
regexobj=re.compile(r"")
matchobj=regexobj.findall(str)
print(matchobj)

在上述代码中,r””中的问号就代表了非贪婪模式。这个正则表达式的匹配结果为[”, ”, ”, ”, ”, ”]。

七、正则 贪婪

正则表达式中,贪婪性是默认的。它会尽可能多地匹配字符,直到无法再匹配为止。例如,在下面的字符串“

标题

正文”中,如果使用“”的正则表达式,将会输出整个字符串“

标题

正文”。在正则表达式中,注意语法不当可能会产生贪婪行为。

八、正则非贪婪匹配

相对于贪婪匹配而言,正则表达式的非贪婪模式匹配更少的字符。当量词跟随一个问号时,将被转化为非贪婪模式。例如,在下面的字符串“abc123abc456abc789”中,如果使用“\d+”的正则表达式,输出结果为[‘123’, ‘456’, ‘789’]。如果加上“?”的非贪婪模式,将输出结果为[‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’]。

以上就是本文对正则表达式非贪婪模式的全面阐述。无论在哪个编程语言中,掌握非贪婪模式都是必要的。希望本文能够对你有所帮助。

原创文章,作者:BKSJ,如若转载,请注明出处:https://www.506064.com/n/149617.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
BKSJBKSJ
上一篇 2024-11-05 16:52
下一篇 2024-11-05 16:53

相关推荐

  • Python正则表达式search()和match()有什么区别?

    search()和match()都是Python中的正则表达式函数,它们的作用都是在一个字符串中搜索匹配正则表达式的位置,但它们有着不同的使用场景和返回结果。 一、search()…

    编程 2025-04-29
  • 手机安全模式怎么解除?

    安全模式是一种手机自身的保护模式,它会禁用第三方应用程序并使用仅限基本系统功能。但有时候,安全模式会使你无法使用手机上的一些重要功能。如果你想解除手机安全模式,可以尝试以下方法: …

    编程 2025-04-28
  • Qt State Machine与状态机模式

    本文将介绍Qt State Machine和状态机模式在Qt中的实现。Qt提供了QStateMachine和QState两个类,可以方便地实现状态机模式,并且能有效地处理复杂的、多…

    编程 2025-04-27
  • 显示C++设计模式

    本文将详细介绍显示C++设计模式的概念、类型、优点和代码实现。 一、概念 C++设计模式是在软件设计阶段定义,用于处理常见问题的可重用解决方案。这些解决方案是经过测试和验证的,并已…

    编程 2025-04-27
  • MySQL正则表达式替换

    MySQL正则表达式替换是指通过正则表达式对MySQL中的字符串进行替换。在文本处理方面,正则表达式是一种强大的工具,可以方便快捷地进行字符串处理和匹配。在MySQL中,可以使用正…

    编程 2025-04-27
  • Centos7进入单用户模式的解释

    本文将介绍如何在Centos7中进入单用户模式,并从以下几个方面进行详细的阐述。 一、Centos7进入单用户模式的解答 在Centos7中进入单用户模式需要执行以下步骤: 1. …

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25

发表回复

登录后才能评论