• 正则表达式为高级的文本模式匹配、抽取、与/或文本形式的搜索和替换功能提供了基础
  • 正则表达式(简称 regex)是一些由字符和特殊符号组成的字符串,它们描述了模式的重复或者表述多个字符
  • 正则表达式能按照某种模式匹配多个字符串
  • Python 通过标准库中的 re 模块来支持正则表达式

举例说明:[A-Za-z]\w+的含义:

  • 第一个字符是字母也就是说要么是 A~Z,要么是 a~z
  • 后面是至少一个(+)由字母数字组成的字符(\w)

1.2 特殊符号和字符

  • 元字符:即特殊符号和字符,给予了正则表达式强大的功能和灵活性

正则表达式中常用个特殊符号和字符有哪些?

特殊符号 描述 示例 示例意义
| 管道符号,表示选择其中一个进行匹配 re1| re2 选择匹配正则表达式 re1 或者 re2
. 匹配除去\n 之外的任意字符 d.d 表示匹配 d 与 d 之间为任意字符的情况,如“did”“d2d”等
^ 匹配字符串起始部分 ^my 表示任何以 my 作为开始的字符串
$ 匹配字符串终止符 bye$ 表示匹配任何以 bye 结束的字符串
* 匹配 0 或者多次左端出现的正则表达式 [0-9]* 表示匹配以任意个数字开始的字符串
+ 匹配 1 次或者多次左端出现的正则表达式 [0-9]+ 表示匹配以 1 个或者多个数字开始的字符串
匹配 0 次或者 1 次左端出现的正则表达式 [0-9]? 表示匹配以 0 个或者 1 个数字开始的字符串
{N} 匹配 N 次左端出现的正则表达式 [0-9]{N} 匹表示配以 N 个数字开始的字符串
{M,N} 匹配 M 次到 N 次左端出现的正则表达式 [0-9]{M,N} 匹表示配以 M 个到 N 个数字开始的字符串
[…] 匹配来自括号中字符集的任意一个 [abcd] 表示匹配 a 或者 b 或者 c 或者 d
[.-.] 匹配从.到.之间的任意一个字符 [a-g] 表示匹配 a 到 g 之间的任意一个字符,如 a 或 b…
[^…] 不匹配此字符集中的任何一个字符 [^abc] 表示匹配不是字符 a 或 b 或 c 的任意字符
() 对正则表达式进行分组或者匹配子组 ([0-9]{3})? 表示匹配三个数字出现一次或者不出现的情况
特殊字符 描述 示例 示例意义
\d (\D) \d 匹配任何一个十进制数字,\D 不匹配任何数字 \d\d\d 匹配三个数字的字符串
\w (\W) \w 匹配任何一个字母字符,\W 不匹配任何字母字符 \w+ 匹配一个由字母字符组成的字符串
\s (\S) \s 匹配任何空格字符,\S 不匹配任何空格字符 of\sthe 匹配 of 和 the 之间有任何空格字符的情况
\b(\B) \b 匹配任何单词边界,\B 不匹配任何单词边界 \bthe 任何以 the 开始的字符串
\N 匹配已保存的子组 N price:\N 匹配 price:后面加已保存的子组 N 的形式
\c 仅按照 c 的字面意思进行匹配 * 匹配字符*
\A(\Z) \A 匹配字符串的开始,\Z 匹配字符串的结尾 \Acar 匹配以 car 开始的字符串

我们发现在特殊字符中大写往往表示与小写意义相反,可以用来帮助记忆。

1.2.1 使用择一匹配符号匹配多个正则表达式模式

  • 择一匹配有时候也称作并(union)或者逻辑或(logical OR)

  • 表示择一匹配的管道符号(|)表示一个“从多个模式中选择其一”的操作。

  • 它用于分割不同的正则表达式

例如,正则表达式模式at|home,匹配到的字符串为at、home

1.2.2 匹配任意单个字符

  • 点号(.)符号匹配除了换行符(\n)以外的任何字符。

例如,正则表达式模式f.o能够匹配在字母”f”和”o”之间的任意一个字符,像 fao, f9o, f#o 等

  • 注意:如要匹配句点符号(.),必须使用反斜线转义句点符号的功能,比如”.“

1.2.3 从字符串起始或者结尾或者单词边界匹配

  • 如果要匹配字符串的开始位置,就必须使用脱字符(^)或者特殊字符\A。后者主要用于那些没有脱字符的减排
  • 美元符号($)或者\Z 将用于匹配字符串的末尾位置
  • 特殊字符\b 和\B 可以用来匹配字符边界。

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

例如:

正则表达式模式 匹配的字符串
^From 任何以 From 作为起始的字符串
/bin/tcsh$ 任何以/bin/tcsh 作为结尾的字符串
^Subject:hi$ 任何由单独的字符串 Subject:hi 构成的字符串

瓦雀