Python函数篇(7)-正则表达式

1.正则表达式

??正则表达式为高级的文本模式匹配,抽取,与/或文本形式的搜索和替换功能提供了基础,简单的来说,正则表达式是由一些字符和特殊符号组成的字符串。Python通过标准库中的re模块来支持正则表达式。

2.特殊符号和字符

??首先介绍一下最常见的特殊符号和字符,即所谓的元字符。

表示法 描述 正则表达式用法示例
literal 匹配文本字符串的字面值literal re.findall("chen","sadchen21")
. 匹配任意字符(除了\n之外) re.findall("c..n","sadchen21")
^ 从字符串开始部分开始匹配 re.findall("^sad","sadchen21")
$ 匹配字符串的终止部分 re.findall("21$","sadddchen21")
* 匹配0次或多次前面出现的正则表达式 re.findall("sad*","saddddchen21")
+ 匹配1次或多次前面出现的正则表达式 re.findall("sad+","sadddchen21")
匹配0次或者1次前面出现的正则表达式 re.findall("sad?","sadddchen21")
{N} 匹配N次前面出现的正则表达式 re.findall("sad{3}","sadddchen21")
{M,N} 匹配M~N次前面出现的正则表达式 re.findall("sad{1,3}","sadddcen21")
[] 匹配来自字符集的任一单一字符 re.findall("[a-z]","sadddcen21")
[^..] 不匹配此字符集中出现的任一字符,包括某一范围的字符 re.findall("[^a-z]","sadddcen21")
(...) 匹配封闭的正则表达式,然后另存为子组 re.findall("[(a-z)]","sadddcen21")
\d 匹配任何的十进制数,与[0-9]一致(/D与/d相反,不匹配任何非数值型的数字) re.findall("\d","sa2dcen21")
\w 匹配任何字母数字字符,与[A-Z],[a-z],[0-9]相同,(\W与之相反) re.findall("\w","sa2dcen21")
\s 匹配任何空格字符,与\n\r\t等相同,(与\S相反) re.findall("\s","sa2dce\nn 21")
\b 匹配任何单词边界,匹配特殊字符(\B与之相反) re.findall(r"I\b","I am Czp")

??在上面/b的例子中,为什么要加r?

??r的作用就是让后面的字符串不做任何的转义,如果不加r能不能起到相同的作用呢?

re.findall("I\\b","I am Czp")   通过转义符\来实现

3.重要符号详细用法讲解

  • 表示择一的管道符号“|”,表示一个“从多个模式中选择其一”的操作,它用于分割不同的正则表达式,择一匹配有时候也被称为(union)或逻辑或
re.findall("ka|b","sdkakb11")     匹配ka或b
re.findall("ka|b","sdka11")    
  • 匹配任意字符“.”,点好或句点(.)符号匹配除了换行符\n以外的任意字符
re.findall("s..a","sdka11")  匹配在s和a之间任意的两个字符
re.findall("..","sdka11")    匹配任意两个字符
re.findall(".a","sdka112")   匹配a前的任意一个字符

??要显式匹配一个句点符号本身,必须使用反斜杠转义句点符号的功能,例如“\.”

  • 从字符串起始或者结尾或者单词边界匹配“^”“$”“\b”
re.findall("^sa","sdka112")  匹配以s开头的字符或字符串
re.findall("12$","sdka112")  匹配以12结尾的字符或字符串

??匹配边界字符“\b”

??\b用于匹配一个单词的边界,这意味着如果一个模式必须位于单词的起始部分,就不管该单词前面(单词位于字符串中间)是否有任何字符(单词位于首行),而\B将匹配出现在一个单词中间的模式,即不是单词边界

re.findall("er","never")        匹配任意包含the的字符串
re.findall(r"er\b","never")     匹配任意以er为起始位置的字符串
re.findall(r"er\B","evern")     匹配包含er但不以er为起始的字符串

??创建字符集“[]”

??“.”可以用于匹配任意符号,但某些时候需要匹配某些特定字符,这就需要[],用来匹配一对方括号中包含的任何字符。如b[ner]t匹配的字符串就是bnt,bet,brt,方括号表示逻辑或的功能,对于单个字符,如果想要:要么匹配a,要么匹配b,就可以用[ab]表示,字符集只适用于单字符的情况,如果要匹配多个字符,就需要使用择一方法“|”

??最常用的特殊符号“”“+”“?”

??""、"?"、"+"都可以用来匹配一个、多个或者没有出现的字符串模式,"*”用来匹配其左边的正则表达式出现零次或多次,“+”号将匹配一次或多次出现的情况,“?”将匹配零次或一次出现的正则表达式,而{N}或{M,N}这将最终精确的匹配前面的正则表达式N次或一定范围的次数。

??当模式匹配使用分组操作符的时候,正则表达式的引擎将试图匹配出尽可能多的字符,这叫做贪婪匹配

re.findall("sad*","saddddsds")  匹配d,d可以出现0次,或多次
re.findall("sad+","saddddsds")  匹配d,d不可以出现0次,匹配1次或多次
re.findall("sad?","saddddsds")  匹配d,d可以出现0次,匹配0次或1次
re.findall("\d{2}","sad123dsds") 匹配两个连续的数字字符

??如果想要提取任意已经成功匹配的特定字符串或子字符串,就需要用“()”来包裹正则表达式

??当使用正则表达式的时候,一对圆括号可以实现以下任意一个功能

  • 对正则表达式进行分组
  • 匹配子组

??示例:当有两个不同的正则表达式而且想用它们来比较同一个字符串的时候,就需要用到“()”,还有对正则表达式进行分组可以重复使用操作符,使匹配到的子字符串保存起来以供后续使用。

??扩展表示法,以问号开始(?..),很重要的一个(?P

4.re模块的核心函数和方法

??常见的正则表达式属性

compile() | 使用可选的标记来编译正则表达式的模式,返回一个对象

match() | 匹配字符串,如果成功,就返回匹配对象,如果失败,就返回None

search() | 匹配第一次出现的正则表达式,成功,返回匹配对象,失败,就返回None

findall() | 查找字符串中所有出现的正则表达式模式,并返回一个匹配列表

finditer() | 与findall相同,但返回的不是一个列表,而是一个迭代器

spilt() | 将字符串分割为列表,返回成功匹配的列表

sub() | 替换所有正则表达式的模式在字符串中出现的位置

purge() | 清楚隐式编译的正则表达式模式

group() | 返回整个匹配对象,或者编号为num的特定子组

??函数篇就写到这里,接下来会写面向对象部分的内容,如果有遗漏的,欢迎大家和我交流,我会第一时间补上遗漏的知识点。

原文地址:https://www.cnblogs.com/Chen-Zhipeng/p/8194096.html

时间: 2024-08-02 08:03:55

Python函数篇(7)-正则表达式的相关文章

Python函数篇

1.函数名的命名规则: 函数名必须以下划线或字母开头,可以包含任意字母.数字或下划线的组合.不能使用任何的标点符号: 函数名是区分大小写的. 函数名不能是保留字. 2. 形参和实参 形参:形式参数,不是实际存在,是虚拟变量.在定义函数和函数体的时候使用形参,目的是在函数调用时接收实参(实参个数,类型应与实参一一对应) 实参:实际参数,调用函数时传给函数的参数,可以是常量,变量,表达式,函数,传给形参 区别:形参是虚拟的,不占用内存空间,.形参变量只有在被调用时才分配内存单元,实参是一个变量,占用

python第一篇:正则表达式的方法简单归纳

首先先对一些常用的匹配模式进行一下介绍及互相认识一下,当然了可能它认识我,但我绝对还不认识它... ******************************************** 元字符 [ . ^ $ * + ? {} [] \ | () ] ******************************************** 1.[.] 匹配任意1个字符,除了换行符(\n). 要匹配包括'\n'在内的任何字符,就使用'[.\n]'的模式 例: import re print(r

python函数篇0-1

创建类和对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 "类" 和 "对象" 来实现,所以,面向对象编程其实就是对 "类" 和 "对象" 的使用. 类就是一个模板,模板里可以包含多个函数,函数里实现一些功能 对象则是根据模板创建的实例,通过实例对象可以执行类中的函数 class是关键字,表示类 创建对象,类名称后加括号即可 ps:类中的函数第一个参数必须是self(详细见:类的三大特性之封装) 类中定义的函数叫做

python函数篇0-2

函数的有三中不同的参数: 普通参数 默认参数 动态参数# ######### 定义函数 ######### # name 叫做函数func的形式参数,简称:形参def func(name):    print (name) # ######### 执行函数 ######### #  'fuyuteng' 叫做函数func的实际参数,简称:实参func('fuyuteng') def func(name, age = 18): print ("%s:%s" %(name,age)) #

python re模块学习--正则表达式函数

这里主要介绍Python中常用的正则表达式处理函数.关于python中正则表达式的语法会再总结一篇博文. re.match re.match 尝试从字符串的开始匹配一个模式,如:下面的例子匹配第一个单词. 代码如下: #!/usr/bin/env python# -*- coding: utf-8 -*-import retext = "JGood is a handsome boy, he is cool, clever, and so on..."m = re.match(r&qu

python基础篇【第六篇】模块补充、正则表达式

上一篇已经讲述了什么是模块,下面我们再一起认识一些python中常用的模块. 一.os模块 前面也有用到过os模块,但那都是小儿科,os模块在日后的python撸码中将一直会伴随着你! python编程时,经常和文件.目录打交道,这是就离不了os模块.os模块包含普遍的操作系统功能,与具体的平台无关. 要想使用模块,需先导入模块   如:import os     导入模块 1. os.name()——判断现在正在实用的平台,Windows 返回 ‘nt'; Linux 返回’posix' 1

python基础13 ---函数模块3(正则表达式)

正则表达式 一.正则表达式的本质 1.正则表达式的本质(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行. 2.正则表达式简介 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分 强大.得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的

第六篇:Python函数进阶篇

在了解完了 Python函数基础篇之后,本篇的存在其实是为了整合知识,由于该篇的知识是否杂乱,故大家可以通过点开点连接直接进入其详细介绍,该篇主要大致的介绍一下几个知识点:  一.Python的迭代器和生成器 二.Python的内置函数 三.Python的open函数之文件处理 四.Python的递归函数 五.Python的高阶函数 六.Python的装饰器 一.Python的迭代器和生成器: 本篇我们介绍可迭代对象和迭代器对象--包括两者的定义及区别.为什么要有迭代器对象,其的用法是怎么样的

计算机二级python 知识点篇(函数与代码复用)

计算机二级python 知识点篇(函数与代码复用) 全局变量 全局变量指在函数之外定义的变量, 在程序执行全过程有效. 全部变量在函数内部使用时, 需要提前使用保留字global声明, 语法形式如下: global <全局变量> >>>n = 2 #n是全局变量 >>>def multiply(x, y = 10): global n return x*y*n # 使用全局变量n >>>s = multiply(99, 2) >>