一、元字符
正则表达式中的特殊字符被称作元字符,常用的元字符如下:
. 点,匹配除换行符以外的任意字符
w 匹配数字、字母和下划线(可以匹配汉字)
s 匹配空白字符,如空格、换行符、制表符等
d 匹配数字
匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结尾
(特殊) 转义字符。如果需要匹配的内容含有元字符本身的,需要使用转义字符进行转义
“.”的用法(使用python3.x进行举例,具体的python3.x的正则表达式的用法请参考http://www.cnblogs.com/cdinc/p/5789429.html):
string='qq14717287xx@qq.com&10010/10086' pattern=r'.com.' item=re.search(pattern,string) print(item.group())
运行结果是:
.com&
可以看到匹配的结果是com和前一个字符和后一个字符,这个就是这个“.”的作用。
“w”的用法:
string='qq14717287xx@qq.com&10010/10086' pattern=r'7287w' item=re.search(pattern,string) print(item.group())
运行结果是:
7287x
可以看到匹配的结果是“7287”后面再多加一个字母,这就是“w”的用法。
“s”的用法:
string='qq14717287xx@qq. com&10010/10086' pattern=r'scom' item=re.search(pattern,string) print(item.group())
运行结果是:
com
在com前面又匹配到了一个空格
“d”的用法:
string='qq14717287xx@qq. com&10010/10086' pattern=r'qqd' item=re.search(pattern,string) print(item.group())
运行结果是:
qq1
“”的用法:
string='qq14717287xx@qq. com&10010/10086' pattern=r'com' item=re.search(pattern,string) print(item.group())
运行结果是:
com
将“com”作为一个单词进行匹配。因为匹配的是单词的开头或者结尾,所以如果匹配的是“om”也可以匹配上,是com单词的结尾,但是“om”则无法匹配,因为om前面有c,认为com是一个单词,“om”并不是单词的开始位置,所以无法匹配。
“^”的用法:
string='qq14717287xx@qq. com&10010/10086' pattern=r'^qq' item=re.search(pattern,string) print(item.group())
运行结果是:
匹配以“qq”开头,所以能够匹配上,如果是“^com”,则无法匹配上。
“$”的用法:
string='qq14717287xx@qq. com&10010/10086' pattern=r'0086$' item=re.search(pattern,string) print(item.group())
运行结果是:
0086
匹配以0086结尾,能够匹配上。填写正则表达式的时候,$符号要放在匹配字符串或者公式的后面。
“”(转移字符)的用法:
string='qq14717287xx@qq.com$10010/10086' pattern=r'com$' item=re.search(pattern,string) print(item.group())
运行结果是:
com$
可见本次就是纯粹的查找的“com$”,而没有将$作为元字符处理。
二、重复
正则表达式中提供了几种重复的方式,毕竟如果匹配三个字母使用“www”的方式太不方便了,如果是三个还好,如果是十个、二十个呢。
* 重复零次或者多次
+ 重复一次或者多次
? 重复零次或者一次
{n} 重复n次
{n,} 重复n次或者更多次
{n,m} 重复n次到m次
“*”的用法:
string='qq14717287xx@qq.com$10010/10086' pattern=r'w*' item=re.search(pattern,string) print(item.group())
运行结果是:
qq14717287xx
可以看到匹配到了多次字母和数字。
“+”的用法:
string='qq14717287xx@qq.com$10010/10086' pattern=r'w+!*' item=re.search(pattern,string) print(item.group())
运行结果是:
qq14717287xx
结果是匹配到了多个字母、数字,因为匹配字符串中没有“!”。如果匹配的是“w+!+”,则无法匹配。这从另一个方面说明了“*”和“+”的区别。
“?”的用法:
string='qq14717287xx@qq.com$10010/10086' pattern=r'w+@?' item=re.findall(pattern,string) print(item)
运行结果是:
['qq14717287xx@', 'qq', 'com', '10010', '10086']
可以看到,使用匹配的字符后面含有1个或没有“@”符号
“{n}”的用法:
string='qq14717287xx@qq.com$10010/10086' pattern=r'w{5}' item=re.findall(pattern,string) print(item)
运行结果是:
['qq147', '17287', '10010', '10086']
对于数字、字母重复了五次的地方进行了匹配。
“{n,}”的用法:
string='qq14717287xx@qq.com$10010/10086' pattern=r'w{5,}' item=re.findall(pattern,string) print(item)
运行结果是:
['qq14717287xx', '10010', '10086']
匹配了数字、字母重复5次及以上的地方。
“{n,m}”的用法:
string='qq14717287xx@qq.com$10010/10086' pattern=r'w{5,8}' item=re.findall(pattern,string) print(item)
运行结果是:
['qq147172', '10010', '10086']
可以看到,因为限定了重复次数(5-8次),所以第一个组合(qq14717287xx)被分开进行匹配。