导入模块:
import re
注意:下面的均是匹配单个字符!!!!!
1、最常见符号
| 或(匹配多个字符串),例如 bt = 'abc|ccd',正则表达式为abc ccd
. 匹配任意单个字符(换行符/n除外)
^ 匹配字符串开始
$ 匹配字符串结束
* >=0次
+ >=1次
? 0次或1次
{N} 匹配前面出现的正则表达式N次
{M,N} 匹配前面的正则表达式出现M-N次的字符串
[abc] 匹配abc的任意一个字符串
[a-zA-Z]
[^abc] 匹配除abc外的字符 (^放在外面是匹配开头,放在中括号内部是取反的意思)
() 组建组
2、特殊符号()
/d /D 匹配任意数字0-9,大写为反义,匹配任意非数字
/w /W 匹配任意数字字母0-9A-Za-z,大写为反义,匹配任意非数字非字母
/s /S 匹配任意空白符,和[/n/t/r/v/f]功能相同,大写为反义,
/b /B 匹配单词边界
/A(/Z) 匹配字符串的起始(结尾)
3、简单举例
/d{3}-/d{3}-/d{4} 美国电话号码 800-555-1212
/w+@/w+/.com 简单的xxx@yyy.com的电子邮件地址
4、re模块的使用
4-1 re.match()使用
从第一个字母开始匹配,匹配成功返回对象,失败返回None
4-2 re.search()
搜索字符串中模式首次出现的位置,而不是在起始位值匹配,严格讲,是从左到右进行搜索。
m = re.match(r'foo','seafood') 返回None
m = re.search(r'foo','seafood') 返回foo,匹配成功
注:括号内r代表原始字符串
何为原始字符串,举例说明/b既可以是原始的退格建,也是正则表达式的匹配单词,那么怎么区分呢,你可以进行转义,即//b代表正则表达式的匹配单词,但是这样的话,看起来很复杂,就出现了原始字符串,只需要r'/b'即可,即代表匹配单词
>>>m = re.match('/bblow','blow') #返回None
>>>m = re.match('//bblow','blow') #返回'blow'
>>>m = re.match(r'/bblow','blow') #返回'blow'
4-3 re.findall()
找到每一个出现的匹配部分,返回结果为一个数组
4-4 re.sub() re.subn()
匹配和替换,对匹配到的正则表达式进行替换,两者的功能相同,只是返回结果不同,sub()返回替换后的字符串,subn()返回一个元组,即第一项是替换后的字符串,第二项的替换的次数。
举例说明:
>>>re.sub(r'[ae]','X','abcdef')
'XbcdXf'
>>>re.subn(r'[ae]','X','abcdef')
('XbcdXf',2)
4-5 re.split()分割
举例说明:
#!/usr/bin/env python from os import popen from re import split f = popen('who','r') #who是linux下的命令 for eachLine in f: print split('/s/s+|/t',eachLine.strip()) f.close