Python中的正则表达式要用到re模块,下面先介绍一下正则表达式需要用到的特殊字符和说明
| 语法 | 说明 |
| d | 匹配一个数字字符 |
| D | 匹配一个非数字字符 |
| s | 匹配任何不可见字符(空格、制表符、换行符等) |
| S | 匹配任何可见字符 |
| w | 匹配任何单词字符 |
| W | 匹配任何非单词字符 |
| . | 匹配所有字符 |
| ^ | 从字符串开头开始匹配,比如^d表示以一个数字字符开头 |
| $ | 从字符串末尾开始匹配,比如d$表示以一个数字字符结尾 |
| * | 匹配前一个字符任意次 |
| + | 匹配前一个字符一次或多次 |
| ? | 匹配前一个字符零次或一次 |
| {m} | 匹配前一个字符m次 |
| {m,n} | 匹配前一个字符最少m次最多n次 |
| 转义字符 | |
| [] | 比如[a-z]表示匹配从a到z之间的所有字符串 |
| | | 或,比如A|B表示匹配A或B |
| () | 精确匹配括号中指定的模式 |
| 函数 | 说明 |
|---|---|
| search | 从字符串中进行搜索,成功则返回匹配目标,失败则返回None |
| match | 从字符串开头进行匹配,成功则返回匹配目标,失败则返回None |
| fullmatch | 匹配整个字符串 |
| split | 根据模式分割字符串 |
| findall | 查找字符串中所有非重叠匹配 |
| finditer | 类似于findall,但返回Python迭代器 |
| sub | 用提供的字符串替代匹配模式 |
以下为部分示例:对于split函数,我们在对字符串进行分割的时候可以直接调用split方法,再次不再进行
>>> import re#导入包 >>> a='xiaoming:wo jiao xiaoming,wo de dianhua shi +86-666666' >>> print(re.search(pattern='d+Wd+',string=a))#此处输出的时一个match对象 >>> mp=re.search(pattern='d+Wd+',string=a)#查找电话号码 >>> print(mp.group())#使用group方法获取于指定模式相匹配的字符串 86-666666 >>> print(mp.start())#获取第一个匹配字符串的索引 45 >>> print(mp.end())#获取匹配字符串的 54 >>> print(mp.span())#获取索引范围 (45, 54) >>> print(re.findall(pattern='w+',string=a)) ['xiaoming', 'wo', 'jiao', 'xiaoming', 'wo', 'de', 'dianhua', 'shi', '86', '666666'] >>> m_sub=re.sub(pattern='w+:',string=a,repl='xiaohong:')#模式替代,使用repl传入的字符串替代匹配到的第一个字符串 >>> print(m_sub) xiaohong:wo jiao xiaoming,wo de dianhua shi +86-6666 #编译模式 >>> p=re.compile('d{6}')#预先设定好匹配的模式 >>> m1=p.search(a)#对预先设定好的模式调用查找 >>> print(m1.group())获取查找到的字符串 666666



