返回顶部
首页 > 资讯 > 后端开发 > Python >Python正则表达式 r'(.*) are (.*?) .*'的深入理解
  • 814
分享到

Python正则表达式 r'(.*) are (.*?) .*'的深入理解

2024-04-02 19:04:59 814人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

在学习python3的正则表达式的时候遇到一个例子 #!/usr/bin/python3 import re line = "Cats are smarter than dogs

学习python3正则表达式的时候遇到一个例子

#!/usr/bin/python3
import re
 
line = "Cats are smarter than dogs"
# .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
# (.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
 
if matchObj:
   print ("matchObj.group() : ", matchObj.group())
   print ("matchObj.group(1) : ", matchObj.group(1))
   print ("matchObj.group(2) : ", matchObj.group(2))
else:
   print ("No match!!")

运行结果为

matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

这个例子主要的理解为r‘(.*) are (.*?) .*’,以下为我查询资料之后所得到的个人理解以及试验

  1. 前面的r比较好理解,表示字符串为非转义的原始字符串,让编译器忽略反斜杠,也就是忽略转义字符。但是这个例子中字符串里没有反斜杠,所以这个r可有可无。
  2. (.*) 第一个匹配分组,.*代表匹配除换行符之外的所有字符
  3. (.*?)第二个匹配分组,.*?后面多个问号,代表非贪婪模式,也就是说只匹配符合条件的最少字符
  4. 后面的一个.*  没有括号包围,所以不是分组,匹配效果和第一个一样,但是不计入匹配结果中。

综上所属以一种通俗易懂的描述就是将字符串以are为中断分为几部分,(.*)因为是贪婪的,所以返回的是所有满足条件的内容太,(.*?)为非贪婪模式,所以返回第一个满足要求的内容或没有

匹配成功,这句话如果不好理解就看看下面这个例子

  #!/usr/bin/Python3
  
  import re
   
  #line = "Cats are smarter than dogs"
  line = "a a Cats are Cats are smarter than dogs"
  # .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
  # (.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串
  matchObj = re.match( r'(.*) are (.*) .*', line, re.M|re.I)
   
  if matchObj:
      print ("matchObj.group() : ", matchObj.group())
      print ("matchObj.group(1) : ", matchObj.group(1))
      print ("matchObj.group(2) : ", matchObj.group(2))
  else:                                                                      
      print ("No match!!")

输出结果:

matchObj.group() :  a a Cats are Cats are smarter than dogs
matchObj.group(1) :  a a Cats are Cats
matchObj.group(2) :  smarter than

这个例子主要是将第一个例子中的line字符串进行了观察输出结果

group(1)对应第一个括号的条件,我理解为最后满足are分段的前面的所有内容,如果将第一个括号改为(.*?)就是第一个are的前面内容,经过验证确实是这样的,这里就不贴程序了可以自行验证

以下示例为更好的解释第二个括号的内容以及无括号的.*

 #!/usr/bin/python3
  
  import re
   
  #line = "Cats are smarter than dogs"
  line = "a a Cats are Cats are smarter than dogs"
  # .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
  # (.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串
  matchObj = re.match( r'(.*?) are (.*) .* .*', line, re.M|re.I)             
   
  if matchObj:
      print ("matchObj.group() : ", matchObj.group())
      print ("matchObj.group(1) : ", matchObj.group(1))
      print ("matchObj.group(2) : ", matchObj.group(2))
  else:
      print ("No match!!")

matchObj.group() :  a a Cats are Cats are smarter than dogs
matchObj.group(1) :  a a Cats
matchObj.group(2) :  Cats are smarter

group(2)对应第二个括号的条件:因为我将这里第一个括号的内容添加了?所以第一个括号索引的内容就是第一个are前面的内容,第二个括号就在当前这个are之后开始索引,在这里我没有加不加? 所以输出为输出后面出去.*条件的所有内容

.*因为没有()所以不能使用group访问,但是会实际占用位置,上面例子最后使用了两个.* 所以最后占用两个单词,那么前面的内容就是group(2)的输出内容了

可以自己尝试一个多加几个 are在语句中 然后判断语句修改有无?或者括号进行观察效果

  #!/usr/bin/python3
  
  import re
  
  #line = "Cats are smarter than dogs"
  line = "a a Cats are CatsB are smarter are than are dogs are dogs b c d e"
  # .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
  # (.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串
  matchObj = re.match( r'(.*?) are (.*?) (.*?) (.*) .*', line, re.M|re.I)    
   
  if matchObj:
      print ("matchObj.group() : ", matchObj.group())
      print ("matchObj.group(1) : ", matchObj.group(1))
      print ("matchObj.group(2) : ", matchObj.group(2))
      print ("matchObj.group(3) : ", matchObj.group(3))
      print ("matchObj.group(4) : ", matchObj.group(4))
  else:
      print ("No match!!")

matchObj.group() :  a a Cats are CatsB are smarter are than are dogs are dogs b c d e
matchObj.group(1) :  a a Cats
matchObj.group(2) :  CatsB
matchObj.group(3) :  are
matchObj.group(4) :  smarter are than are dogs are dogs b c d

总结

到此这篇关于Python正则表达式 r‘(.*) are (.*?) .*‘的深入理解的文章就介绍到这了,更多相关Python正则表达式 r‘(.*) are (.*?) .*‘内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python正则表达式 r'(.*) are (.*?) .*'的深入理解

本文链接: https://lsjlt.com/news/119168.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python正则表达式 r'(.*) are (.*?) .*'的深入理解
    在学习Python3的正则表达式的时候遇到一个例子 #!/usr/bin/python3 import re line = "Cats are smarter than dogs...
    99+
    2024-04-02
  • Python正则表达式中的'r'用法总结
    目录Python正则表达式中的'r'一、Python字符串前面加'r'二、正则表达式匹配原理三、正则表达式前面加'r'总结Python...
    99+
    2023-05-18
    python正则表达式r python 正则表达 python 正则表达式
  • 理解python正则表达式
    在python中,对正则表达式的支持是通过re模块来支持的。使用re的步骤是先把表达式字符串编译成pattern实例,然后在使用pattern去匹配文本获取结果。 其实也有另外一种方式,就是直接使用re模块...
    99+
    2022-06-04
    正则表达式 python
  • 深入详解PHP正则表达式转义
    正则表达式是一种用于匹配字符串的强大工具,它可以方便地进行字符串操作。然而,在编写正则表达式的过程中,有时可能需要匹配一些特殊字符,如“\”,“|”、“{”等,这些字符在正则表达式中具有特殊含义,需要进行转义。PHP中提供了一些用于转义正则...
    99+
    2023-05-14
    php 正则表达式 正则
  • 深入理解PHP正则表达式处理中文字符
    深入理解PHP正则表达式处理中文字符 正则表达式是对字符串进行模式匹配和搜索的一种强大工具,能够帮助开发者高效地处理字符串操作。PHP作为流行的服务器端脚本语言,也提供了丰富的正则表达...
    99+
    2024-04-02
  • 深入浅出解析正则表达式-替换原则
    正则表达式的替换原则是指在使用正则表达式进行替换操作时,根据指定的正则表达式模式匹配到的内容将被替换为指定的替换字符串。在正则表达式...
    99+
    2023-08-11
    正则表达式
  • 深入了解JavaScript中正则表达式的使用
    目录一、什么是正则表达式1、正则表达式特点2、正则表达式的使用二、正则表达式中的特殊字符1、正则表达式的组成2、边界符3、字符类4、量词符5、括号总结6、预定义类三、String类中...
    99+
    2024-04-02
  • 如何理解Python的正则表达式
    今天就跟大家聊聊有关如何理解Python的正则表达式,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Python正则表达式!前面也有跟大家分享关于正则表达式的Python学习教程,但是...
    99+
    2023-06-02
  • python正则表达式入门篇
    本文主要为没有使用正则表达式经验的新手入门所写。 转载请写明出处 引子 首先说 正则表达式是什么? 正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression...
    99+
    2023-01-31
    入门篇 正则表达式 python
  • Python 正则表达式详解
    目录1.正则表达式是什么2.1用正则表达式2.2匹配原理2.3常用函数总结1.正则表达式是什么 很简单就是一种字符串匹配,eg: 比如你在注册账户时我们需要对用户的用户名判断是否合法...
    99+
    2024-04-02
  • Python中使用正则表达式及正则表达式匹配规则详解
    目录1 导库2 使用模板3 说明4 示例5 正则表达式匹配规则1 导库 import re 2 使用模板 re_pattern = re.compile(pattern, flags...
    99+
    2023-03-22
    Python正则表达式匹配规则 Python正则表达式
  • Python中正则表达式详解
    基础篇 正则表达式在python中运用的非常多,因为他可以进行任意的匹配,可以匹配我们想要提取的信息。当我们接触正则的时候你就会知道正则的强大。正则有一个库re 在一些工程中我们会经常调用正则的库来做与匹配...
    99+
    2022-06-04
    详解 正则表达式 Python
  • python正则表达式最详解
    目录一、正则表达式–元字符1.数量词2.字符匹配3.边界匹配4.组5.匹配模式参数二、方法re.findallre.matchgroup匹配对象re.searchre.compile...
    99+
    2024-04-02
  • 11 Python的正则表达式
    概述         在上一节,我们介绍了Python的文件操作,包括:打开文件、读取文件、写入文件、关闭文件、文件指针移动、获取目录列表等内容。在这一节中,我们将介绍Python的正则表达式。正则表达式是一种强大的工具,用于在文本中进行匹...
    99+
    2023-09-08
    python 正则表达式 re模块 re.search re.match
  • Python中的正则表达式
    正则表达式 是包含文本和特殊字符的字符串, 为高级的文本模式匹配, 抽取, 与文本形式的搜索和替换功能提供了基础 Python通过标准库re模块来支持正则表达式 模式匹配的两种方法完成匹配(模式匹配) 搜索(search())...
    99+
    2023-01-31
    正则表达式 Python
  • 只能输入正整数的正则表达式及常用的正则表达式
    只能输入正整数的正则表达式:^[1-9]\d*$常用的正则表达式:1. 匹配手机号码:^[1][3,4,5,7,8,9]\d{9}$...
    99+
    2023-08-16
    正则表达式
  • Python爬虫正则表达式怎么理解
    本篇内容介绍了“Python爬虫正则表达式怎么理解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!元字符^ $ * + . | {} [] ...
    99+
    2023-06-17
  • Python 正则表达式入门(初级篇)
    引子 首先说 正则表达式是什么? 正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计...
    99+
    2022-06-04
    入门 正则表达式 Python
  • Python 正则表达式入门(中级篇)
    初级篇链接:http://www.lsjlt.com/article/99372.htm 上一篇我们说在这一篇里,我们会介绍子表达式,向前向后查找,回溯引用。到这一篇开始前除了回溯引用在一些场合不可替代以外...
    99+
    2022-06-04
    入门 正则表达式 Python
  • Python正则表达式基本原理
    目录⭐️正则表达式  正则表达式是什么?🌟1.实例引入🌟2.match()✨匹配目标✨贪婪匹配🌟3.findall()🌟常用符号🌟特殊字符🌟总结⭐️正则表达式&n...
    99+
    2023-05-15
    Python正则表达式原理 Python正则表达式
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作