第7单元 正则表达式 python
第7单元 正则表达式
本单元知识点 >7.1概述 >7.2为何需要使用正列表达式 >7.3正则表达式的语法 >7.4在Python中使用正则表达式 >7.5捕获 >7.6贪婪与非贪梦模式 >7.7典型案例
本单元知识点 ➢ 7.1 概述 ➢ 7.2 为何需要使用正则表达式 ➢ 7.3 正则表达式的语法 ➢ 7.4 在Python中使用正则表达式 ➢ 7.5 捕获 ➢ 7.6 贪婪与非贪婪模式 ➢ 7.7 典型案例
7.1概述 正则表达式:又称规侧表达式,实际上是一个“文本模式”,通过一个字符 序列来定义一种搜索模式,主要用于字符串模式匹配或字符串匹配(即查找 和替换操作)。一个正则表达式由字母、数字和一些特殊符号组成,这些符 号的序列组成一个“规则字符串”,用来表示满足某种逻辑条件的字符串。 给定一个正则表达式和一个普通字符串,我们可以: 判断普通字符串(或其子串)是否符合正则表达式所定义的逻辑(字符串与 正则表达式是否匹配);从字符串中提取或替换某些特定部分
7.1 概述 正则表达式:又称规则表达式,实际上是一个“文本模式”,通过一个字符 序列来定义一种搜索模式,主要用于字符串模式匹配或字符串匹配(即查找 和替换操作)。一个正则表达式由字母、数字和一些特殊符号组成,这些符 号的序列组成一个“规则字符串”,用来表示满足某种逻辑条件的字符串。 给定一个正则表达式和一个普通字符串,我们可以: 判断普通字符串(或其子串)是否符合正则表达式所定义的逻辑(字符串与 正则表达式是否匹配);从字符串中提取或替换某些特定部分
许多编程语言都对正则表达式提供了不同程度的支持,图7-1展示了使用 正则表达式进行匹配的流程。 正则表达式文本 编译 正则表达式对象 匹配 待匹配文本 匹配结果 图7-1正则表达式匹配流程
许多编程语言都对正则表达式提供了不同程度的支持,图7-1展示了使用 正则表达式进行匹配的流程。 图7-1 正则表达式匹配流程
7.2为何需要使用正则表达式 通过使用正则表达式,可以: 1、测试字符串内的模式。 例如,可以测试输入字符串,查看字符串内是否出现电话号码模式或信用卡号 码模式。这称为数据验证。 2、替换文本。 可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文 本替换它。 3、基于模式匹配从字符串中提取子字符串。 4、可以查找文档内或输入域内特定的文本
7.2 为何需要使用正则表达式 通过使用正则表达式,可以: 1、测试字符串内的模式。 例如,可以测试输入字符串,查看字符串内是否出现电话号码模式或信用卡号 码模式。这称为数据验证。 2、替换文本。 可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文 本替换它。 3、基于模式匹配从字符串中提取子字符串。 4、可以查找文档内或输入域内特定的文本
7.3正则表达式的语法 正则表达式(regular expression)由普通字符(例如字符a到z)和一些特殊字符 (元字符metacharacters)组成的文本模式。模式描述在搜索文本时要匹配的 个或多个字符串。正则表达式作为一个模式,将某个字符模式与所搜索的字符串进 行匹配。元字符是正则表达式中具有特殊含义的字符,用来匹配一个或者若干个满 足某种条件的字符。这些元字符是构成正则表达式的关键要素。 构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算 符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是弟 个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。 面分类列出最常用的元字符及其含义
7.3 正则表达式的语法 正则表达式(regular expression)由普通字符(例如字符a到z)和一些特殊字符 (元字符metacharacters)组成的文本模式。模式描述在搜索文本时要匹配的一 个或多个字符串。正则表达式作为一个模式,将某个字符模式与所搜索的字符串进 行匹配。元字符是正则表达式中具有特殊含义的字符,用来匹配一个或者若干个满 足某种条件的字符。这些元字符是构成正则表达式的关键要素。 构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算 符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单 个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。下 面分类列出最常用的元字符及其含义
7.3.1 python中的字符 普通字符包括没有显式指定为元字符的所有可打印和不可打印 字符。这包括所有大写和小写字母、所有数字、所有标点符号 和一些其他符号
7.3.1 python中的字符 普通字符包括没有显式指定为元字符的所有可打印和不可打印 字符。这包括所有大写和小写字母、所有数字、所有标点符号 和一些其他符号
1非打印字符 非打印字符也可以是正则表达式的组成部分。下表列出了表示 非打印字符的转义序列: 字符 描述 \Cx 匹配由x指明的控制字符。例如:,\cM匹配,个Control-M或回车符。X的值 必须为A-Z或a-z之一。否测,将c视为一个原义的'c字符。 匹配一个换页符。等价于\x0c和\cL。 n 匹配一个换行符。等价于\x0a和\cJ。 \r 匹配一个回车符。等价于\xOd和\cM。 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[\fAn八tv]。 注意Unicode正则表达式会匹配全角空格符。 IS 匹配任何非空白字符。等价于[A\n小八t扒。 t 匹配一个制表符。等价于\x09和\cl。 v 匹配一个垂直制表符。等价于\xO6和\cK
1.非打印字符 非打印字符也可以是正则表达式的组成部分。下表列出了表示 非打印字符的转义序列: 字符 描述 \cx 匹配由x指明的控制字符。例如: \cM 匹配一个 Control-M 或回车符。x 的值 必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。 \f 匹配一个换页符。等价于 \x0c 和 \cL。 \n 匹配一个换行符。等价于 \x0a 和 \cJ。 \r 匹配一个回车符。等价于 \x0d 和 \cM。 \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 注意 Unicode 正则表达式会匹配全角空格符。 \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 \t 匹配一个制表符。等价于 \x09 和 \cI。 \v 匹配一个垂直制表符。等价于 \x0b 和 \cK
2.特殊字符 所谓特殊字符,就是一些有特殊含义的字符,如字符串ZUno。b中的*,简单的说 就是表示任何字符串的意思。如果要查找字符串中的*符号,则需要对*进行转义, 即在其前加一个:Zuno*ob匹配zuno*ob。 特殊字符 描述 匹配输入字符串的结尾位置。如果设置了RegExp对象的Multiline属性,则$也匹配\n或 八。要匹配$字符本身,请使用\$。 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使 用(和)。 匹配前面的子表达式零次或多次。要匹配*字符,请使用\*。 + 匹配前面的子表达式一次或多次。要匹配+字符,请使用\+。 匹配除换行符\之外的任何单字符。要匹配.,请使用\.。 标记一个中括号表达式的开始。要匹配[,请使用\【。 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配?字符,请使用\?。 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如,'匹 配字符''。n匹配换行符。序列V'匹配",而\'则匹配"。 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要 匹配A字符本身,请使用\个。 标记限定符表达式的开始。要匹配{,请使用。 指明两项之间的一个选择。要匹配1,请使用\|
2.特殊字符 所谓特殊字符,就是一些有特殊含义的字符,如字符串 zunoo*b 中的 *,简单的说 就是表示任何字符串的意思。如果要查找字符串中的 * 符号,则需要对 * 进行转义, 即在其前加一个 \: zuno\*ob 匹配zuno*ob。 特殊字符 描述 $ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。 ( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使 用 \( 和 \)。 * 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \* 。 + 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。 . 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。 [ 标记一个中括号表达式的开始。要匹配 [,请使用 \[。 ? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ?字符,请使用 \?。 \ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹 配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。 ^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要 匹配 ^ 字符本身,请使用 \^。 { 标记限定符表达式的开始。要匹配 {,请使用 \{。 | 指明两项之间的一个选择。要匹配 |,请使用 \|
3.数量限定符 字符 描述 匹配前面的子表达式零次或多次。例如,go*能匹配"g”,"go"以及"goo”。*等 价于0。 匹配前面的子表达式一次或多次。例如,g0+能匹配"go”以及"g0o”,但不能匹 配"g"。+等价于{10 匹配前面的子表达式零次或一次。例如,“go?"可以匹配“g"以及“g0”,但不能匹 配"goo"。?等价于{01}。 n是一个非负整数。用来匹配前面的字符串n次。例如,'o2不能匹配"Bob"中 的'o',但是能匹配food'中的两个o。 n,} n是一个非负整数。至少匹配n次。例如,'o2}不能匹配"Bob”中的'o,但能匹 配"foooood”中的所有o。'o1,}等价于'o+。'o0}则等价于'o*。 (n,m) m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如, “ab1,3}”能匹配“ab”或“abbb”但不能匹配“abbbb”。'o0,1y'等价于 “o?'。请注意在逗号和两个数之间不能有空格
3.数量限定符 字符 描述 * 匹配前面的子表达式零次或多次。例如,go* 能匹配 "g" ,”go”以及 "goo"。* 等 价于{0,}。 + 匹配前面的子表达式一次或多次。例如,go+' 能匹配 "go" 以及 "goo",但不能匹 配 "g"。+ 等价于 {1,}。 ? 匹配前面的子表达式零次或一次。例如,“go?” 可以匹配 “g”以及“go” ,但不能匹 配”goo”。? 等价于 {0,1}。 {n} n是一个非负整数。用来匹配前面的字符串 n 次。例如,'o{2}' 不能匹配 "Bob" 中 的 'o',但是能匹配 "food" 中的两个 o。 {n,} n是一个非负整数。至少匹配n次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹 配 "foooood" 中的所有o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。 {n,m} m和n 均为非负整数,其中n <= m。最少匹配n次且最多匹配m次。例如, “ab{1,3}” 能匹配“ab”或“abbb”,但不能匹配“abbbb” 。‘o{0,1}’ 等价于 ‘o?'。请注意在逗号和两个数之间不能有空格