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
相关文章
|
2天前
|
Web App开发 JavaScript
学习VUE之正则表达式全集整理
学习VUE之正则表达式全集整理
|
5天前
|
小程序 程序员 开发者
Python学习心得——小白的成长之路
Python学习心得——小白的成长之路
14 0
|
5天前
|
网络安全 Python
网安之python基础学习练习(2-3)
本篇博文是关于网络安全课程中Python编程的学习实践总结。分享关于两个练习题目及其解决方案。第一个题目要求用户输入姓名并选择一项武技,使用for循环和if判断实现。第二个题目是删除列表中特定值(如'cat')的所有元素,作者展示了两种方法,包括列表推导式和常规循环删除。接下来,文章还介绍了如何编写一个函数,随机生成一副扑克牌(除大小王),并返回一张随机抽取的牌。
|
5天前
|
存储 网络安全 索引
网安之python基础学习练习(1)
本篇博文是关于网络安全课程中Python编程学习的总结,主要内容包括:1) 常见数据类型的回顾和应用,如数字(整数、浮点数、复数)、字符串、列表、元组、集合、字典和布尔类型;2) 数据类型的实例操作,展示如何创建和使用这些类型;3) 数值类型之间的加、减、乘、除和模运算;4) 列表和元组的索引访问;5) 字典的修改,如查看键和值,以及更新值。文章强调了基础知识的重要性,并以“自满必定失败,骄傲必定后悔”作为每日一言。
|
7天前
|
机器学习/深度学习 数据挖掘 程序员
Python学习难度的具体标准
Python学习难度因个人编程背景、目标、资源和学习能力而异。对有编程经验者来说,Python的简单语法使其易上手;而对于新手,理解基础概念可能需更多时间。不同应用领域(如Web开发、数据分析)的学习曲线也不同。丰富的学习资源适应各种水平,但选择合适资源很重要。成功学习Python需要逻辑思维、问题解决能力及毅力。总的来说,Python学习难度因人而异,需结合自身条件评估。
19 0
|
7天前
|
存储 索引 Python
python数据结构知识学习
【5月更文挑战第6天】Python提供四种核心数据结构:列表(List)——可变有序集合,支持索引和切片;元组(Tuple)——不可变有序集合;字典(Dictionary)——键值对结构,通过键访问值;集合(Set)——无序不重复元素集合,支持数学运算。此外,Python允许自定义数据结构,如链表、树、图,以适应不同问题需求。
17 0
|
13天前
|
机器学习/深度学习 分布式计算 物联网
【Python机器学习专栏】联邦学习:保护隐私的机器学习新趋势
【4月更文挑战第30天】联邦学习是保障数据隐私的分布式机器学习方法,允许设备在本地训练数据并仅共享模型,保护用户隐私。其优势包括数据隐私、分布式计算和模型泛化。应用于医疗、金融和物联网等领域,未来将发展更高效的数据隐私保护、提升可解释性和可靠性的,并与其他技术融合,为机器学习带来新机遇。
|
13天前
|
机器学习/深度学习 自然语言处理 搜索推荐
【Python机器学习专栏】迁移学习在机器学习中的应用
【4月更文挑战第30天】迁移学习是利用已有知识解决新问题的机器学习方法,尤其在数据稀缺或资源有限时展现优势。本文介绍了迁移学习的基本概念,包括源域和目标域,并探讨了其在图像识别、自然语言处理和推荐系统的应用。在Python中,可使用Keras或TensorFlow实现迁移学习,如示例所示,通过预训练的VGG16模型进行图像识别。迁移学习提高了学习效率和性能,随着技术发展,其应用前景广阔。
|
13天前
|
机器学习/深度学习 算法 前端开发
【Python机器学习专栏】集成学习中的Bagging与Boosting
【4月更文挑战第30天】本文介绍了集成学习中的两种主要策略:Bagging和Boosting。Bagging通过自助采样构建多个基学习器并以投票或平均法集成,降低模型方差,增强稳定性。在Python中可使用`BaggingClassifier`实现。而Boosting是串行学习,不断调整基学习器权重以优化拟合,适合弱学习器。Python中可利用`AdaBoostClassifier`等实现。示例代码展示了如何在实践中运用这两种方法。
|
13天前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习专栏】关联规则学习:Apriori算法详解
【4月更文挑战第30天】Apriori算法是一种用于关联规则学习的经典算法,尤其适用于购物篮分析,以发现商品间的购买关联。该算法基于支持度和置信度指标,通过迭代生成频繁项集并提取满足阈值的规则。Python中可借助mlxtend库实现Apriori,例如处理购物篮数据,设置支持度和置信度阈值,找出相关规则。