Python正则表达式
正则表达式(1.2):
择一匹配符号
表示择一匹配的管道符号为|
,表示从多个模式中选择其一。用于分割不同的正则表达式。
示例:
# 匹配的字符串为:apple、orange
apple|orange
这样一来,正则表达式就可以匹配多个字符串,所以择一匹配有时候也称作并或逻辑或。
匹配任意单个字符
点号(.)匹配除了换行符(\n)以外的任何字符。无论字母、数字、空格、可打印字符、不可打印字符,甚至是符号,使用点号都能匹配。
示例:
# 匹配在字母'f','o'之间的任意三个字符,如fabco、f987o、f#^*o 等等
f...o
# 匹配在字符串end之前的任意一个字符
.end
#匹配在字符串.com之前的任意一个字符
.\.com # 使用反斜线转译'.'。
字符串起始,结尾,单词边界的匹配
匹配字符串的开始位置用 ^
或者 \A
匹配字符串的结尾位置用 $
或者 \Z
示例:
# 匹配任何以www.作为起始的字符串
^www\.
# 匹配任何以.com作为结尾的字符串
\.com$
# 匹配任何由单独的字符串 Subject:hi 构成的字符串
^Subject:hi$
下面我们来通过示例讨论一下\b
和\B
的区别:
# 匹配包含 the 的字符串
the
# 匹配任何以 the 开始的字符串
\bthe
# 仅仅匹配单词 the
\bthe\b
# 任何包含但不以the作为起始的字符串
\Bthe
创建字符集
示例:
b[aeiu]t #匹配的字符串: bat,bet,but,bit
[ab][12] #匹配的字符串: a1,a2,b1,b2
由上例子可以明显看出,方括号表示的是逻辑或功能。
限定范围和否定
除了单个字符以外,字符集还支持匹配指定的字符范围。下面我举一个例子来说明。
1. 限定范围
[A-Z]: 表示匹配大写字母的字符集,`-`为连接符,`[]`构成字符集,`A-Z`表示大写字母。
2.否定
[^aeiou]: 表示匹配一个非元音字符(aeiou为元音字符)。`^`为脱字符,表示否定。
闭包操作
Kleene闭包:*
匹配其左边的正则表达式出现零次或多次的情况
正闭包:+
匹配一次或者多次出现的正则表达式,?
匹配零次或者一次出现的正则表达式。
闭包操作符:
[dn]ot? #t可要可不要,例如:do,no,dot,not
0?[0-9] #任何数值数字,它可能前置一个'0'
[0-9]{15,16} #匹配15或者16个数字
</?[^>]+> #匹配全部HTML标签
表示字符集的特殊字符
\d:可以表示任何十进制数字
\w: 可以表示全部字母数字的字符集
\s: 可以表示空格符号
\D: 可以表示任何非十进制数
# 美国电话号码格式(xxx-xxx-xxxx)
\d{3]-\d{3}-\d{4}
# 以xxx@yyy.com格式表示的简单电子邮箱地址
\w+@\w+\.com
使用圆括号进行分组
示例:
# 名字和姓氏,以及对名字的限制(如果有首字母必须大写,后续字母小写)
# 全名前可以有可选的"Mr.","Mrs","Ms."或者"M"作为称谓
# 以及灵活可选的姓氏,可以有很多单词,横线以及大小写字母。
(Mr?s?\.)?[A-Z][a-z]*[A-Za-z-]+
扩展表示法
扩展表示法,通常用于判断匹配之前提供标记,实现一个前(后)视匹配,或者条件检查
示例:
(?:\w+\.)* #以句点作为结尾的字符串,如:“google”,“twitter”,“Facebook”但是这些匹配不会保存下来供后续使用和数据检索
(?<!192\.168\.) #如果一个字符串前不是“192.168”才做匹配操作,假定用于过滤掉一组C类IP地址。