文本就是由文字字符串组成的,字符串就是0个到多个字符的序列,而常说的某个字符串匹配某个正则表达式,就是字符串中有部分是符合表达式的条件。
正则表达式是处理字符串的强大工具,它通过一定的语法规则查找匹配字符串,并返回自己想获取的字符串值。
即让字符串与某种模式匹配,而获取一个新的序列。
如要使用正则表达式语法,需import re模块,然后使用 r"正则表达式" (解释性正则定义)定义正则规则,也可通过 re.compile(r"正则表达式") (编译性正则定义)进行正则定义,编译性正则定义效率较解释性正则定义要高。
一、正则表达式元字符包括:
. ^ $ * + ? { [ ] | ( )
元字符是正则表达式语法的关键字,具有语法规则,如下例:...表示在a和b之间有3个任意字符,匹配时只需首尾字符是a和b,中间有三个任意字符便能匹配。
二、预定义字符集
d 匹配任何十进制数;它相当于类 [0-9]。
D 匹配任何非数字字符;它相当于类 [^0-9]。
s 匹配任何空白字符;它相当于类 [ "t"n"r"f"v]。
S 匹配任何非空白字符;它相当于类 [^ "t"n"r"f"v]。
w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]。
三、字符匹配
. 匹配除换行符外的任意字符
可以将一个字符进行转义成其他意思。保留特殊字符的本意。下例中的+号是元字符,有正则语法功能,如需表示原意,则需加上转义符
[字符集] 可以匹配字符串中可以是字符集中的任意字符。下例[abc]表示只要是其中的任意一个字符便匹配。
四、匹配字符的数目符号
* 对前一个字符匹配0或者无限次,''是对数字0次的匹配结果
+ 对前一个字符匹配1或者无限次
? 对前一个字符匹配0或1次,下例中对 -号的匹配可有可无
{m} 对前一个字符匹配m次,下例中只匹配2个数字
{m,n} 对前一个字符匹配m到n次,下例中匹配2到4个数字的值
五、匹配边界符号
^ 或 A 对字符串的开头字符串匹配,下例中只匹配头部的字符a
$ 或 对字符串的尾部字符串匹配,下例中只匹配尾部字符b
对w和W之间的字符进行
B [^]
六、逻辑与分组
| 或的意思,对左右字符任意匹配一个,匹配顺序从左到右
(...) 分组,
七、正则表达式函数
match(pattern, string) 利用pattern正则语法搜索字符串,查找到开头相符合的子字串
"a123abab"可以搜索到a字符,"123abab"搜索不到a字符。
search(pattern, string) 利用pattern正则语法搜索字符串,查找到第一个相符的子字串
match和serch搜索到的子字串,可以用其返回值的group()函数进行显示。
sub(pattern, replacement, string) 利用pattern正则语法搜索字符串,找到后,用replacement子字串替换搜索到的子字串。
split(pattern,string) 以正则表达式作为分割字符串,将分割后的所有子字符串放在一个list中返回
findall(pattern,string) 根据正则表达式搜索字符串,将所有符合的子字符串放入list中返回