- 正则表达式为高级的文本模式匹配、抽取、与/或文本形式的搜索和替换功能提供了基础
- 正则表达式(简称 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 构成的字符串 |