正则规范表达式

一、元字符

  正则表达式中的特殊字符被称作元字符,常用的元字符如下:

  .  点,匹配除换行符以外的任意字符

  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

  匹配以“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)被分开进行匹配。

原文地址:https://www.cnblogs.com/everest7/p/10588535.html