最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Python正则表达式入门教程
时间:2016-08-10 编辑:简简单单 来源:一聚教程网
正则表达式的强大早有耳闻,大一时参加一次选拔考试,题目就是用做个HTML解析器,正则的优势表现得淋漓尽致。题外话不多讲,直接上干货:
1. 元字符:
与之对应的还有反义字符,大部分为小写字母变大写,例如\D表示匹配非数字的字符。
2. 重复(即匹配变长的字符串):
元字符可匹配单一的字符类型,若想匹配长度未知或长度限定的字符串需要在后边加上限定符。
3. 范围与分组:
有时元字符并不能满足匹配字符的需求,这时就需要[]来圈定匹配范围,例如要匹配一个只带有a,s,d,f的单词,可以用\b[asdf]\b;正则里面还有小括号用来表示分组,比如你想重复某几个字符,就可以使用分组,例如(\d.\d){1,3}表示匹配小括号里的重复内容一到三次。此外,小括号还可以用来后向引用等,此处不记。
4. 零宽断言:
零宽断言主要用来查找在某些断言(指定内容)之前或之后的内容,例如 (?=exp) 匹配表达式exp前面出现的内容(不匹配exp), (?<=exp) 匹配表达式exp后面出现的内容,还有负向零宽断言等此处不记。
5. 贪婪与懒惰:
当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配 尽可能多 的字符,即贪婪匹配。如表达式 a.*b, 搜索 aabab的话,它会匹配整个字符串 aabab。而懒惰匹配会匹配尽可能少的字符串,只需要在限定符后面加一个?,例如 a.*?b会匹配 aab(第一到第三个字符)和 ab(第四到第五个字符) 。
6. Python的re模块:
python 提供re模块,提供正则的所有功能。下面只记两个方法和一个注意的地方。
6.1 match方法:
match() 方法判断是否匹配,如果匹配成功,返回一个 Match 对象,否则返回 None 。
1 >>> import re
2 >>> re.match(r'^\d{3}\-\d{3,8}$', '010-12345')
3 <_sre.SRE_Match object at 0x1026e18b8>
4 >>> re.match(r'^\d{3}\-\d{3,8}$', '010 12345')
5 >>>
如果正则表达式中定义了组,就可以在 Match 对象上用 group() 方法提取出子串来。注意到 group(0) 永远是原始字符串, group(1) 、 group(2) ……表示第1、2、……个子串。使用groups()方法还可以得到所有子串。
6.2 split方法:
split()方法可切分子串,如下:
1 >>> re.split(r'[\s\,\;]+', 'a,b;; c d')
2 ['a', 'b', 'c', 'd']
6.3 关于转义字符:
python转义字符串也用\表示,所以正则表达式读取时作为字符串出现时会被编译器自动去掉转移字符的\,正则使用时就会出错,所以推荐使用python的 r 前缀。
修辞符 | 描述 |
---|---|
re.I | 执行不区分大小写的匹配。 |
re.L | 根据当前的语言环境解释词组。这种解释影响字母组(w和W),以及单词边界的行为(和B) |
re.M | 使$匹配一行(串的不只是端部)的尾部,使^匹配的行(串不只是开始)的开始 |
re.S | 使一个句号(点)匹配任何字符,包括换行符 |
re.U | 根据Unicode字符集解释的字母。这个标志会影响w, W, , B的行为。 |
re.X | 许可证“cuter”正则表达式语法。它忽略空格(除了一组[]或当用一个反斜杠转义内),并把转义#作为注释标记 |
模式 | 描述 |
---|---|
^ | 匹配的开始的 |
$ | 匹配行尾 |
. | 匹配除换行符的任何单个字符。使用-m选项允许其匹配换行符也是如此。 |
[...] | 匹配括号内任何单个字符 |
[^...] | 匹配任何单个字符不在括号中 |
re* | 匹配0个或多个匹配前面表达式。 |
re+ | 匹配1个或多个先前出现的表达式。 |
re? | 匹配0或1前面出现的表达式。 |
re{ n} | 精确匹配n个前面表达式的数量。 |
re{ n,} | 匹配n或多次出现上述表达式。 |
re{ n, m} | 匹配至少n次和前面表达式的大多数出现m次。 |
a| b | 匹配a或b。 |
(re) | 组正则表达式并记住匹配的文本。 |
(?imx) | 暂时切换上 i, m 或 x正则表达式的选项。如果括号中,仅该区域受到影响。 |
(?-imx) | 暂时关闭切换 i, m, 或 x 正则表达式的选项。如果括号中,仅该区域受到影响。 |
(?: re) | 组正则表达式而不匹配的记住文字。 |
(?imx: re) | 暂时切换上i, m, 或 x 括号内的选项。 |
(?-imx: re) | 暂时关闭切换i, m, 或 x 括号内的选项。 |
(?#...) | 注释 |
(?= re) | 指定使用的模式位置,没有一个范围。 |
(?! re) | 指定使用模式取反位置,没有一个范围。 |
(?> re) | 匹配独立的模式而不反向追踪。 |
w | 匹配单词字符。 |
W | 匹配非单词字符 |
s | 匹配的空白,等价于[ tñ r F] |
S | 匹配非空白 |
d | 匹配的数字。等价于[0-9] |
D | 匹配非数字 |
A | 匹配字符串的开始 |
匹配字符串的结尾。如果一个换行符的存在,它只是换行之前匹配 | |
z | 匹配字符串的结尾 |
G | 匹配点,最后一次匹配结束 |
匹配单词边界之外时,括号内。匹配退格键(0×08),括号里面的时候 | |
B | 匹配非单词边界 |
, , etc. | 匹配换行符,回车符,制表符等 |
1...9 | 匹配第n个分组的子表达式。 |
10 | 匹配,如果它已经匹配第n个分组的子表达式。否则指的是一个字符码的八进制表示。 |
示例 | 描述 |
---|---|
python | 匹配 "python". |
示例 | 描述 |
---|---|
[Pp]ython | 匹配 "Python" 或 "python" |
rub[ye] | 匹配 "ruby" 或 "rube" |
[aeiou] | 匹配任何一个小写元音 |
[0-9] | 匹配任何数字;如果[0123456789] |
[a-z] | 匹配任何小写ASCII的字母 |
[A-Z] | 匹配任何大写的ASCII字母 |
[a-zA-Z0-9] | 匹配任何上述的 |
[^aeiou] | 匹配任何不是小写元音 |
[^0-9] | 匹配任何非数字 |
示例 | 描述 |
---|---|
. | 匹配除换行符外的任何字符 |
d | 匹配一个数字:[0-9] |
D | 匹配一个非数字:[^0-9] |
s | 匹配一个空白字符:[ t rñ F] |
S | 匹配非空白:[^ t rñ F] |
w | 匹配一个单词字符:[A-ZA-Z0-9 _] |
W | 匹配非单词字符:[^ A-ZA-Z0-9 _] |
示例 | 描述 |
---|---|
ruby? | 匹配“rub”或“ruby”:y是可选的 |
ruby* | 匹配“rub”加上0个或多个ys |
ruby+ | 匹配“rub”加上1个或多个ys |
d{3} | 完全匹配3个数字 |
d{3,} | 完全匹配3个及以上的数字 |
d{3,5} | 匹配3,4或5个数字 |
示例 | 描述 |
---|---|
<.*> | 贪婪的重复:匹配“ |
<.*?> | 非贪婪:匹配“ |
示例 | 描述 |
---|---|
Dd+ | 不分组:+重复d |
(Dd)+ | 分组:+重复Dd对 |
([Pp]ython(, )?)+ | 匹配“Python”,“Python, python, python”等。 |
示例 | 描述 |
---|---|
([Pp])ython&1ails | 匹配python&pails或Python&Pails |
(['"])[^1]*1 | 单或双引号字符串。 1匹配第一组匹配。 2匹配第二组匹配等等。 |
示例 | 描述 |
---|---|
python|perl | 匹配"python" 或 "perl" |
rub(y|le)) | 匹配 "ruby" 或 "ruble" |
Python(!+|?) | “Python”后跟一个或多个!或者一个? |
示例 | 描述 |
---|---|
^Python | 匹配“Python”在一个字符串或内部行的开始 |
Python$ | 匹配“巨蟒”的字符串或行尾 |
APython | 匹配“Python”在字符串的开始 |
Python | 匹配“Python”在字符串的结尾 |
Python | 匹配“Python”在字边界 |
rubB | B非单词的边界:匹配“rub”,“rube”和“ruby”,但并不单独 |
Python(?=!) | 匹配“Python”,如果后面的感叹号 |
Python(?!!) | 匹配“Python”,如果后面不是感叹号 |
示例 | 描述 |
---|---|
R(?#comment) | 符合“R”。其余全是注释 |
R(?i)uby | 当匹配“uby”时,不区分大小写 |
R(?i:uby) | 与上述相同 |
rub(?:y|le)) | 只有组,而无需创建1反向引用 |
相关文章
- 正则表达式 w d 的意义分享 07-18
- 正则表达式环视概念与用法 06-06
- 正则表达式详细的去讲解什么是平衡组 05-16
- java怎么用正则?Java正则表达式的基本用法 02-15
- 正则表达式学习教程之回溯引用backreference详解 01-07
- python怎么根据正则表达式提取指定的内容 12-04