正则表达式的学习笔记
1.通配符:
仅能匹配一个字符
“.yhton” 可匹配’python’,’+ython’,’ ython’;
但是无法匹配’cdython’,’aizbuython’
2.对特殊字符进行转义
例子:
‘python.org’可能会匹配到’pythonzorg’,但是在前面加上一个反斜杠,用’python\.org’就只能匹配到’python.org’了
注意,双斜杠是为了让解释器对其转义,可以使用原始字符串,r’python.org’
3.字符集
[pj]ython 仅仅可以匹配python和jython。
[a-zA-Z0-9] 匹配大小写字母和数字
[^abc] 匹配除abc外的任何字符
4.二选一和子模式
二选一用’|’,子模式放在()内
p(ython|erl) 匹配python和perl
5.可选模式和重复模式
通过在子模式后面加上问好,可将其指定为可选模式,即可包含可不包含
r'(http://)?(www\.)?python\.org' 可匹配:
http://www.python.org
http://python.org
www.python.org
python.org
6.
(pattern)* :pattern可匹配0、1或多次
(pattern)+ :pattern可匹配1次或多次
(pattern)? :pattern可匹配0或1次
(pattern){m,n} :pattern可匹配m-n次
7.
[\b] 删除键(backspace)
\f 换页符号
\n 换行
\r 回车
\t 制表(tab键)
\v 垂直制表符
\d 数字字符[0-9]
\D 非数字字符[^0-9]
\w 大小写字母数字或下划线[a-zA-Z0-9_]
\W 非大小写字母数字或下划线[^a-zA-Z0-9_]
\s 任何一个空白字符[\f\n\r\t\v]
\S 任何一个非空白字符[^\f\n\r\t\v]
8.正则的贪婪与非贪婪模式
贪婪模式:尽可能多的匹配字符 * + {n, }
非贪婪模式:匹配尽肯能少点的字符*? +? {n, }?
字符: in <b>ab</b> and <b>cd</b>
正则(贪婪):<[Bb]>.*</[b]> 匹配到<b>ab</b> and <b>cd</b>
正则(非贪婪):<[Bb]>.*?</[b]> 匹配到<b>ab</b> 和 <b>cd</b>
9.向前查找
仅匹配不消费模式
文本:
http://123.123.123
ftp://123.123.123
https://123.123.123
正则:.+(?=:)
结果:http ftp https
结果中虽然匹配到了:,但是未在结果中显示出来,就是所谓的仅匹配,不消费模式,显示:之前的匹配内容
匹配消费模式:
文本:
http://123.123.123
ftp://123.123.123
https://123.123.123
正则:.+(:)
结果:http: ftp: https
10.向后查找:
文本:
abc:$3.2
vfe:$66.45
消费模式正则:
\$[0-9.]+
消费模式结果:
$3.2 $66.45
不消费模式正则:
(?<=\$)[0-9.]6+
不消费模式结果:
3.2 66.45
“`
11.嵌入条件
?匹配前一个字符或者表达式,如果让存在的话.
?=和?<=匹配前面或后面的文本
文本:
123-456-7890
(123)456-7890
(123)-456-7890
(123-456-7890
1234567890
123 456 7890
正则:\(?\d{3}\)?-?\d{3}-\d{4} #用\(?匹配一个可选的左括号
结果:
123-456-7890
(123)456-7890
(123)-456-7890
(123-456-7890