《Python核心编程》——正则表达式学习笔记(1)
正则表达式的定义及作用
定义:正则表达式是由字符和特殊符号组成的字符串,按照某种模式匹配一系列有相似特征的字符串。
作用:可以进行字符串的匹配、切割、替换和获取,用于筛选符合正则表达式模式要求的字符串。
正则表达式的常用符号及其描述
1.使用择一匹配符号匹配多个
使用符号( | ),表示从“多个模式中选择一个”。例如:
正则表达式模式 | 匹配的字符串 |
at|home | at、home |
bat|bet|bit | bat、bet、bit |
也称作并或者逻辑或。
2.匹配任意单个字符
.或者。:匹配除了换行符\n以外的任何字符。
正则表达式模式 | 匹配的字符串 |
f.o | fao、fbo、f#o、f9o等 |
.. | 任意两个字符 |
.end | fend、9end、#end |
如果需要匹配句号和句点字符,则需要使用反斜线转义句点符号,如“\。“
3.从字符串起始、结尾或单词边界匹配
脱字符(^)和\A:用于匹配字符串开始位置。
符号($)和\Z:用于匹配字符串末尾位置。
\b和\B:\b匹配的单词必须位于字符串首部。
\B匹配的单词可以位于字符串任意部位。
正则表达式模式 | 匹配的字符串 |
^from | 任何以from起始的字符串 |
/bin/tcsh$ |
任何以/bin/tcsh结尾的字符串 |
^sub:hi$ |
任何由单独的字符串sub:hi构成的字符串 |
4.匹配特定字符
使用[ ],[ ]里面包含的字符为可以选择的任何字符。
正则表达式模式 | 匹配的字符串 |
b[abcd]t |
bat、bbt、bct、bdt |
[cr][23][dp][o2] |
从每个[]中分别取一个字符,如c2d2、r2po等 |
5.限定范围和否定
[x -y ]:用于限定范围x-y之间的取值。如[a-z]表示取a至z范围的一个字母。
[^...]:表示不匹配给定字符集的任何一个字符。
正则表达式模式 | 匹配的字符串 |
[env-y] | 'e'、'n'、'v'、'w'、'x'、'y' |
[^aeiou] |
一个非元音字符 |
["-a] |
在ASCII表中,位于"到a字符之间的字符 |
6.使用闭包操作符实现存在性和频数匹配
(*):匹配0次或多次左边的正则表达式。
(+):匹配1次或多次左边的正则表达式。
(?):匹配0次或1次左边的正则表达式。
({}):{N}匹配N次左边的正则表达式。{M,N}匹配M~N次。
正则表达式模式 | 匹配的字符串 |
[dn]ot? | 匹配0次或1次't',可能是do,dnot,no, not |
[0-9]{15,16} |
匹配15或者16个数字 |
</?[^>]+> |
匹配全部有效(或无效)的html标签 |
7.表示字符集的特殊字符
\d:表示匹配任何十进制数。
\w:表示匹配全部字母和数字的字符集。相当于[A-Za-z0-9]
\s:匹配空格字符。
这些特殊字符的大写版本表示不匹配,如\D表示任何非十进制数。
正则表达式模式 | 匹配的字符串 |
[A-Za-z]\w* | 第一个字符是字母;其余字符可以是字母或者数字 |
\w+@\w+\.com |
以XXX@YYY.com表示的简单电子邮件地址 |
8.使用圆括号进行分组
圆括号()的作用:(1)对正则表达式进行分组 (2)匹配子组
9.扩展表示法
(?...)作用:判断匹配之前提供标记,实现一个前视(或者后视)匹配,或者条件检查。
正则表达式模式 | 匹配的字符串 |
(?:\w+.)* |
以句点作为结尾的字符串,例如"google."。 |
(?#comment) |
此处不作匹配,只是作为注释。 |
(?=.com) |
字符串后面跟着“.com”才作匹配。 |
(?!.net) | 字符串后面不跟“.net”才作匹配。 |
(?<=800-) | 如果字符串之前是“800-”才作匹配。 |
(?<!192\.168\.) | 字符串之前不是“192.168.”才作匹配。 |
(?(1)x|y) | 如果一个匹配组1存在,就与x匹配;否则与y匹配。 |