Python学习(16)--正则表达式1

简介: Python学习(16)--正则表达式1 1.正则表达式 正则表达式是一种小型的,高度专业化的编程语言。Python中内嵌了正则表达式,当我们需要匹配一个字符串的时候,就用到了Python为我们提供的有关正则表达式处理的模块,比如re模块。

Python学习(16)--正则表达式1

1.正则表达式

正则表达式是一种小型的,高度专业化的编程语言。Python中内嵌了正则表达式,当我们需要匹配一个字符串的时候,就用到了Python为我们提供的有关正则表达式处理的模块,比如re模块。

下面我们来介绍下正则表达式的使用和re模块。

2.正则表达式元字符

     上面我们提到处理正则表达式的re模块,Python中的re模块为我们提供的一个较常用的处理正则表达式的方法就是findall(pattern,string),第一个参数pattern是正则表达式,第二个参数string是待匹配的字符串。
       函数findall(pattern,string)和数据结构中的模式识别类似,不同的是findall(pattern,string)中的模式子串pattern更加灵活多变。下面举一个模式匹配的例子:

[python] view plain copy

  1. import re
  2. s='abc'
  3. print(re.findall(s,"aaabcaaabcaabc"))

在使用re模块之前需要先导入re模块,然后才可以调用它为我们提供的函数。如上,s为一个模式子串,也是最简单的正则表达式,函数findall(pattern,string)会将string中所有与正则表达式pattern匹配的子串都找出来,并返回一个由子串组成的列表。打印结果如下:

      
       如上结果,re.findall(s,"aaabcaaabcaabc")会将"aaabcaaabcaabc"中所有与"abc"匹配的子串找出来,并封装到列表中返回。
      (1)[]
 
            []为正则表达式的一个元字符,所匹配到的是一个字符,下面介绍下如何使用[]来匹配字符串。
            实例1:形如[abc],匹配'a','b','c'中的任一个字符,且[abc]匹配到的只能是一个字符。代码例子如下:

[python] view plain copy

  1. import re
  2. s3='t[io]p'
  3. print(re.findall(s3,"tip top trp tep typ tiop"))
             如上正则表达式s3='t[io]p',可以匹配到模式子串"tip"或者"top",即[io]=="i"或者[io]=="o"。代码运行结果如下:
             
             如上,函数findall(pattern,string)将"tip top trp tep typ tiop"中把匹配到s3的所有子串找到并返回。
             实例2:形如[^abc]:匹配到非字符"a","b","c"的任意一个字符,即[^abc]=='d',[^abc]=='e',但[^abc]!="a"||"b"||"c",^在[]中的开始位置使用表示的是取非符号。代码例子如下:

[python] view plain copy

  1. import re
  2. s4='t[^io]p'
  3. print(re.findall(s4,"tip top trp tep typ tiop tp"))
              如上,正则表达式s4='t[^io]p',首先s4匹配到的是一个长度为3的字符串,其次[^io]匹配到的为非"i"和"o"的任意一个字符,如可以匹配到"tup","thp",但是匹配不到"tip","top"。代码打印结果如下:
               
              实例3:形如[a-z]表示的是一个从字符"a"到字符"z"的任意一个字符。代码例子如下:

[python] view plain copy

  1. import re
  2. s="t[a-c]p"
  3. print(re.findall(s,"tap tbp tcp tdp tp tiop tgp tbcp"))
              如上代码,正则表达式s="t[a-c]p",首先s匹配到的是一个长度为3的字符串,其次[a-c]=="a"||"b"||"c",即s匹配到的模式子串只能是"tap","tbp","tcp",代码打印结果如下:
               
             如果需要匹配的字符范围不只一个,那么多个字符范围依次写在[]中就可以了,如下代码:

[python] view plain copy

  1. import re
  2. s9="x[1-9a-z]x"
  3. print(re.findall(s9,"x1x x2x x3x x4x xax xbx xzx "))
              如上s9="x[1-9a-z]x",[1-9a-z]有两个字符范围,分别是'1'-'9'和'a'-'z',可以匹配到的字符是所有的数字字符和小写字母字符。代码打印结果如下:
              
          (2)^
           以上我们提到,元字符^在[]中首位表示取非,当元字符^单独使用并作为正则表达式的首位字符时,表示的是查询^后的模式子串是否为待匹配主串的开始字符串,如"^abc"表示查询待匹配主串是否以模式子串"abc"作为开头,如果是,则返回模式子串"abc",否则返回空。
           代码例子如下:

[python] view plain copy

  1. import re
  2. s5="^hello"
  3. print(re.findall(s5,"hello world,hello myGF"))
  4. print(re.findall(s5,"world,hello myGF"))
           如上,s5="^hello"表示查找待匹配子串的开始是否是"hello",如果是则返回模式子串"hello",如果不是则返回空。代码打印结果如下:
           
          (3)$
          元字符$在正则表达式的结尾使用,  表示的是查询待匹配主串是否以$前的模式子串结尾,如"abc$”表示查找待匹配字符串的结尾字符串是否是"abc",如果是则返回"abc",否则返回空。代码例子如下:

[python] view plain copy

  1. import re
  2. s5="myGF$"
  3. print(re.findall(s5,"hello world,hello myGF"))
  4. print(re.findall(s5,"hello world,hello"))
           如上,正则表达式s5="myGF$"表示查找待匹配主串的结尾字符串是否是"myGF",如果是返回"myGF",否则返回空。代码打印结果如下:
            
            (4)注意事项
            事项一:$在[]中使用的时候是无效的,$只是被当做一个普通字符来进行模式匹配。如[abc$]可以匹配到的字符有'a','b','c','$'。'$'被当做普通字符,与'a','b','c'一样处理。如下代码:

[python] view plain copy

  1. import re
  2. s6="t[abc$]"
  3. print(re.findall(s6,"ta"))
  4. print(re.findall(s6,"tb"))
  5. print(re.findall(s6,"tc"))
  6. print(re.findall(s6,"t$"))
            如上所示,s6='t[abc$]',可以匹配到的模式子串如下:"ta","tb","tc","t$"。运行结果如下:
            
             事项二:元字符^在[]中使用,只有在^位于[]开头的情况下才表示取非的含义,在其他位置使用都会被当做普通字符来处理。代码如下:

[python] view plain copy

  1. import re
  2. s7="t[a^bc]"
  3. print(re.findall(s7,"ta tb tc t^ td"))
             如上s7="t[a^bc]",^在[a^bc]的位置并不是首位字符,所以^会被当做普通字符"^"来处理,s7可以匹配到的模式子串为,"ta","t^","tb","tc"。代码打印结果如下:
             
               下一节我们会继续介绍正则表达式,敬请期待。
原文地址http://www.bieryun.com/2345.html
相关文章
|
3月前
|
安全 关系型数据库 测试技术
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
121 61
|
3月前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
165 3
|
1天前
|
Python
python pandas学习(一)
该代码段展示了四个主要操作:1) 删除指定列名,如商品id;2) 使用正则表达式模糊匹配并删除列,例如匹配订单商品名称1的列;3) 将毫秒级时间戳转换为带有时区调整的日期时间格式,并增加8小时以适应本地时区;4) 将列表转换为DataFrame后保存为Excel文件,文件路径和名称根据变量拼接而成。
12 3
|
2月前
|
Python 容器
Python学习的自我理解和想法(9)
这是我在B站跟随千锋教育学习Python的第9天,主要学习了赋值、浅拷贝和深拷贝的概念及其底层逻辑。由于开学时间紧张,内容较为简略,但希望能帮助理解这些重要概念。赋值是创建引用,浅拷贝创建新容器但元素仍引用原对象,深拷贝则创建完全独立的新对象。希望对大家有所帮助,欢迎讨论。
|
2月前
|
Python
Python学习的自我理解和想法(10)
这是我在千锋教育B站课程学习Python的第10天笔记,主要学习了函数的相关知识。内容包括函数的定义、组成、命名、参数分类(必须参数、关键字参数、默认参数、不定长参数)及调用注意事项。由于开学时间有限,记录较为简略,望谅解。通过学习,我理解了函数可以封装常用功能,简化代码并便于维护。若有不当之处,欢迎指正。
|
1月前
|
数据可视化 数据挖掘 大数据
1.1 学习Python操作Excel的必要性
学习Python操作Excel在当今数据驱动的商业环境中至关重要。Python能处理大规模数据集,突破Excel行数限制;提供丰富的库实现复杂数据分析和自动化任务,显著提高效率。掌握这项技能不仅能提升个人能力,还能为企业带来价值,减少人为错误,提高决策效率。推荐从基础语法、Excel操作库开始学习,逐步进阶到数据可视化和自动化报表系统。通过实际项目巩固知识,关注新技术,为职业发展奠定坚实基础。
|
2月前
|
存储 索引 Python
Python学习的自我理解和想法(6)
这是我在B站千锋教育学习Python的第6天笔记,主要学习了字典的使用方法,包括字典的基本概念、访问、修改、添加、删除元素,以及获取字典信息、遍历字典和合并字典等内容。开学后时间有限,内容较为简略,敬请谅解。
|
2月前
|
存储 程序员 Python
Python学习的自我理解和想法(2)
今日学习Python第二天,重点掌握字符串操作。内容涵盖字符串介绍、切片、长度统计、子串计数、大小写转换及查找位置等。通过B站黑马程序员课程跟随老师实践,非原创代码,旨在巩固基础知识与技能。
|
2月前
|
程序员 Python
Python学习的自我理解和想法(3)
这是学习Python第三天的内容总结,主要围绕字符串操作展开,包括字符串的提取、分割、合并、替换、判断、编码及格式化输出等,通过B站黑马程序员课程跟随老师实践,非原创代码。
|
2月前
|
Python
Python学习的自我理解和想法(7)
学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码! 今天是学Python的第七天,学的内容是集合。开学了,时间不多,写得不多,见谅。

热门文章

最新文章

推荐镜像

更多