Python程序设计基础-教学课件 第9章 正则表达式_第1页
Python程序设计基础-教学课件 第9章 正则表达式_第2页
Python程序设计基础-教学课件 第9章 正则表达式_第3页
Python程序设计基础-教学课件 第9章 正则表达式_第4页
Python程序设计基础-教学课件 第9章 正则表达式_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章

正则表达式目录9.1正则表达式概述9.2基本规则9.49.3正则表达式的组正则表达式的函数9.1正则表达式概述

正则表达式(RegularExpression)是一种字符模式的描述方法,用于匹配、搜索和替换字符串。它是由各种字符和特殊字符组成的字符串,通过特定的语法规则定义匹配模式。正则表达式的应用场景广泛。1324可以用正则表达式查找特定模式的文本,如匹配特定单词、日期、邮件地址等。可以用正则表达式验证输入数据是否符合特定的格式要求,如验证邮箱、手机号码等。正则表达式在编程中得到广泛应用,用于字符串操作、模式匹配、提取信息等。可以用正则表达式将匹配的模式替换为新内容,如替换掉所有的空格、转换日期格式等。编程语言中的文本处理数据校验和验证文本替换和转换文本搜索和匹配9.2.1

正则表达式中的字符串类型正则表达式中的字符串类型指的是正则表达式中用来匹配的具体字符组合。这些字符可以包括字母、数字、特殊字符以及转义字符等。在正则表达式中,可以使用字符类别来表示特定类型的字符。此外,正则表达式还支持使用转义字符来表示特殊字符。通过组合不同类型的字符和使用量词来控制匹配次数,可以构建出复杂且灵活的正则表达式,用于匹配各种字符串模式。9.2.2模式字符串中的普通字符模式字符串中的普通字符,是指除了一些具有特殊意义的字符之外的常规字符。在正则表达式中,普通字符直接表示它们自身,用于与目标字符串进行精确匹配。例如,在模式字符串中包含字母"a",那么正则表达式将会匹配目标字符串中的所有"a"字符。同样地,如果在模式字符串中包含数字"5",那么正则表达式将会匹配目标字符串中的所有"5"字符。在某些情况下,模式字符串中的某些特殊字符也可能被视为普通字符。通常情况下,这些特殊字符会通过在它们前面加上反斜杠(\)来转义,以表示它们自身而不是特殊含义。例如,如果想匹配目标字符串中的一个句点字符(.),可以在模式字符串中使用\.。模式字符串中的普通字符直接匹配目标字符串中对应的字符,不涉及任何特殊的规则或符号解释。9.2.3模式字符串中的转义字符

模式字符串中的转义字符是用来表示具有特殊意义的字符的特殊字符序列。转义字符通常由一个反斜杠(\)紧跟着要转义的字符组成。通过使用转义字符,可以匹配那些在正则表达式中有特殊意义的字符,例如正则表达式中的元字符(如.、^、$、*、+、?、{、}、[、]、|、(、)等)以及一些其他特殊字符(如换行符\n、制表符\t等)。例如,如果想匹配目标字符串中的一个点字符(.),需要在模式字符串中使用转义字符,即使用\.。同样地,如果要匹配一个制表符字符(\t),需要使用\t。如果想匹配反斜杠字符自身,需要使用两个连续的反斜杠(\\),因为反斜杠在正则表达式中也是一个转义字符。转义字符在正则表达式中用于转义具有特殊意义的字符,使得它们能够被正确匹配。通过使用转义字符,可以精确地匹配模式中的特殊字符,而不会与其它正则表达式语法冲突。9.2.4模式字符串中的特殊字符

模式字符串中的特殊字符是在正则表达式中具有特殊含义或功能的字符。这些特殊字符用于定义匹配模式,控制匹配方式和匹配数量。元字符描述.匹配除了换行符以外的任意字符^匹配字符串的开头$匹配字符串的结尾\b匹配单词边界\B匹配非单词边界[]定义字符类别,匹配括号内的任意字符|表示逻辑或,匹配两个模式中的任意一个表9-1元字符量词描述*匹配前面的元素零次或多次+匹配前面的元素一次或多次?匹配前面的元素零次或一次{n}匹配前面的元素恰好

n次{n,}匹配前面的元素至少

n次{n,m}匹配前面的元素至少

n次且不超过m次表9-2量词转义字符描述\用于转义特殊字符表9-3转义字符9.3.1捕获组

正则表达式中的捕获组是指用括号括起来的子表达式,用于提取和操作匹配到的子字符串。当正则表达式匹配成功时,捕获组将会保存匹配到的子字符串。可以使用特殊的语法来引用捕获组中的内容,例如通过使用编号(1、2、3...)或者命名来引用捕获组。这样,就可以在正则表达式中针对捕获组中的内容进行后续操作,如替换、提取、条件匹配等。例如,假设有一个正则表达式模式为(ab)+,目标字符串为"ababab"。使用该正则表达式可匹配到三个连续的"ab"子串。如果将子表达式(ab)使用括号括起来,那么这个括号内的子表达式就构成了一个捕获组。通过捕获组,可以获取到每个匹配到的子串,例如编号为1的捕获组将会依次保存"ab"、"ab"、"ab"。捕获组在处理正则表达式时非常有用,可以在匹配过程中捕获需要的子字符串,然后用于后续的字符串操作和处理。9.3.1捕获组假设有一个目标字符串为"JohnDoe",想从中提取出名字和姓氏。可以使用正则表达式(\w+)\s(\w+)来捕获名字和姓氏。(\w+)是第一个捕获组,匹配一个或多个连续的单词字符(字母、数字、下划线)。它会捕获名字部分。01(\w+)是第二个捕获组,同样匹配一个或多个连续的单词字符。它会捕获姓氏部分。0203\s匹配一个空白字符(包括空格、制表符、换行符等)。使用捕获组,可以提取到匹配结果中的姓名部分。通过对捕获组的引用,可以进一步操作和处理这些提取到的子字符串。例如,可以使用编程语言中的正则表达式相关函数,通过引用捕获组的内容将名字和姓氏提取出来,然后进行相应的处理和输出。9.3.2条件匹配

在正则表达式中,条件匹配允许根据某些条件来选择性地匹配模式。条件匹配可以根据一个条件表达式的结果来决定是否进行匹配。这可以用于处理不同的情况或模式选择。条件匹配可以使用以下语法来表示:(?(condition)true-pattern|false-patterrn)其中,condition

是一个条件表达式,可以是一个正则表达式模式或其他布尔表达式。true-pattern

是满足条件时要匹配的模式,false-pattern

是条件不满足时要匹配的模式。假设要匹配一个字符串,它的开头是数字,然后是字母,并且如果字母是小写字母,则后面必须跟一个大写字母,否则后面不能有大写字母。正则表达式模式可以写为:^\d+[a-z](?(?=[a-z])[A-Z]|[^A-Z])^\d+匹配一个或多个数字字符作为开头。[a-z]匹配一个小写字母。(?([a-z])[A-Z]|[^A-Z])是条件匹配部分,如果结果为真,则匹配[A-Z],即一个大写字母。如果结果为假,则匹配[^A-Z],即除大写字母外的任意字符。9.3.3断言组在正则表达式中,断言组是一种特殊的构造,用于在匹配过程中进行先行或后行的条件判断,而不消耗实际的匹配字符。断言组分为两种类型:先行断言和后行断言。12使用(?=...)语法表示。它会匹配满足括号内条件的位置,在匹配成功后,继续向前匹配实际字符。使用(?<=...)语法表示。它会匹配满足括号内条件的位置,在匹配成功后,向后匹配实际字符。后行断言先行断言

断言组允许在匹配过程中添加额外的逻辑条件,以便更精确地指定要匹配的位置。它们在处理复杂的匹配需求时非常有用。9.4.1正则对象和匹配规则在Python中,可以使用内置的re模块来创建和使用正则对象。re模块提供了一系列函数,用于处理正则表达式的编译、匹配和替换等操作。使用正则对象的基本步骤如下:1)导入re模块在使用正则表达式之前,需要先导入Python的re模块。该模块提供了正则表达式的相关功能,语法格式为:importre2)编译正则表达式使用re模块的compile()函数来编译正则表达式字符串,返回一个正则对象。其中,r'正则表达式'是一个原始字符串表示的正则表达式。pattern=pile(r‘正则表达式’)3)使用正则对象进行匹配操作通过调用正则对象的方法,如match()、search()、findall()等,可以在目标字符串中进行匹配操作。这些方法会返回匹配结果。result=patteren.match(‘目标字符串’)如果匹配成功,可以使用Match对象的group()方法来获取匹配的字符串。4)处理匹配结果也可以直接使用

re

模块的函数来进行正则操作,而不必显式地编译正则对象。但若需要多次使用相同的正则表达式进行匹配,编译正则对象可以提高效率。正则表达式的匹配规则可以通过在正则表达式字符串中使用特定的语法和元字符来指定。以下是一些常用的正则表达式匹配规则:9.4.1正则对象和匹配规则正则表达式中的普通字符表示按字面值匹配。普通字符匹配01使用方括号[...]表示一个字符类,用于匹配字符集合中的任意一个字符。02字符类匹配使用反斜杠“\”来转义元字符或特殊字符,使它们具有普通字符的含义。03转义字符匹配使用特定的量词元字符(如*、+、?、{m}、{m,n})指定匹配次数。量词匹配04使用特殊的元字符“^”和“$”来指定匹配的整个字符串的起始和结束位置。边界匹配05使用圆括号(...)来创建分组,并使用\1、\2等反向引用来匹配捕获的分组。分组和捕获0607预定义字符类使用特定的预定义字符类简化常见的匹配需求。(1)match

函数正则对象的成员函数match

是用于从字符串的开头开始匹配正则表达式的方法。它尝试在目标字符串的开头找到与正则表达式完全匹配的内容。match方法的语法如下:

match_obj=pattern.match(string,pos,endpos)9.4.2常用成员函数

pattern是一个已编译的正则表达式对象;

string是目标字符串,即要进行匹配的字符串;

pos(可选)是匹配的起始位置,默认为0(开头);

endpos(可选)是匹配的结束位置,默认为字符串的长度。match方法返回一个Match对象,如果找到匹配,则该对象包含有关匹配的相关信息;如果没有找到匹配,则返回None。match对象有几个常用的方法,可以从中提取匹配的相关信息:

group():返回整个匹配的字符串。

start():返回匹配的起始位置。

end():返回匹配的结束位置的下一个位置。

span():返回匹配的起始位置和结束位置的元组。(2)search

函数正则对象的成员函数search是用于在字符串中搜索匹配正则表达式的方法。它在目标字符串中查找符合正则表达式的任意位置的匹配。search方法的语法如下:

search_obj=pattern.search(string,pos,endpos)9.4.2常用成员函数

pattern是一个已编译的正则表达式对象;

string是目标字符串,即要进行搜索的字符串;

pos(可选)是搜索的起始位置,默认为0(开头);

endpos(可选)是搜索的结束位置,默认为字符串的长度。search()方法返回一个Match对象,如果找到匹配,则该对象包含有关匹配的相关信息;如果没有找到匹配,则返回None。(3)fullmatch

函数正则对象的成员函数fullmatch是用于完全匹配正则表达式的方法。它尝试在目标字符串中找到与正则表达式完全匹配的内容。fullmatch方法的语法如下:

fullmatch_obj=pattern.fullmatch(string)9.4.2常用成员函数

pattern是一个已编译的正则表达式对象;

string是目标字符串,即要进行匹配的字符串。fullmatch方法返回一个Match对象,如果找到完全匹配,则该对象包含有关匹配的相关信息;如果没有找到完全匹配,则返回None。9.4.2常用成员函数(4)split

函数正则对象的成员函数split是用于按照正则表达式匹配的位置将字符串分割为子字符串的方法。split方法的语法如下:

split_list=pattern.split(string,maxplit=0)

pattern是一个已编译的正则表达式对象;

string是目标字符串,即要进行分割的字符串;

maxsplit(可选)是分割次数,如果指定为0或负数,则不限制分割次数。split()方法返回一个由分割后的子字符串组成的列表。9.4.2常用成员函数(5)sub

函数正则对象的成员函数sub是用于在目标字符串中替换与正则表达式匹配的部分。sub方法的语法如下:

new_string=pattern.sub(rep1,string,count=0)

pattern是一个已编译的正则表达式对象;

repl是用于替换匹配部分的字符串;

string是目标字符串,即要进行替换的字符串;

count(可选)是替换的最大次数,如果指定为0或负数,则进行所有可能的替换。注意:sub方法中的repl参数可以是一个字符串,也可以是一个替换函数。如果是字符串,则会将所有匹配部分替换为该字符串。如果是替换函数,则可以根据匹配的结果动态生成替换字符串。9.4.2常用成员函数(6)findall

函数正则对象的成员函数findall

是用于查找目标字符串中所有与正则表达式匹配的部分,并返回一个包含所有匹配项的列表。findall方法的语法如下:

matches=pattern.findall(string)

pattern是一个已编译的正则表达式对象;

string是目标字符串,即要进行匹配的字符串。findall方法返回一个列表,其中包含了目标字符串中所有与正则表达式匹配的部分。注意:findall方法只返回匹配项的内容,不包括匹配项的位置信息。9.4.2常用成员函数(7)finditer

函数正则对象的成员函数finditer是用于查找目标字符串中所有与正则表达式匹配的部分,并返回一个由匹配对象组成的迭代器。finditer方法的语法如下:

matches=pattern.finditer(string)

pattern是一个已编译的正则表达式对象;

string是目标字符串,即要进行匹配的字符串。finditer方法返回一个迭代器,该迭代器由匹配对象组成。每个匹配对象都包含了匹配项的内容以及其位置信息。注意:匹配对象的方法和属性与Match对象

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论