一:re模块的使用
在python中,需要通过正则表达式对字符串进行匹配操作的时候,可以使用一个模块re
re模块的使用过程:
import re #导入re模块
result = re.match(正则表达式,要匹配的字符串) #使用match()方法进行匹配操作;若匹配成功返回Match Object对象,若不成功则返回None
result.group() #如果上一步匹配到数据的话,就可以使用group()方法来提取数据(可以带参数),
二:常见的正则表达式符号
表示字符:
字符 | 功能 |
. | 匹配任意一个字符(\n除外) |
[] | 匹配[]中列举的字符 |
\d | 匹配数字,即0-9 |
|\D | 匹配非数字 |
\s | 匹配空白,即空格,tab间等 |
\S | 匹配非空白 |
\w | 匹配单词字符,a-z,A_Z,0-9 |
\W | 匹配非单词字符 |
表示数量:
字符 | 功能 |
* | 匹配前一个字符出现0次或无限次,即可有可无 |
+ | 匹配前一个字符出现一次货无限次,即至少一次 |
? | 匹配前一个字符出现0次或者一次 |
{m} | 匹配前一个字符出现m次 |
{m,} | 匹配前一个字符至少出现m次 |
{m,n} | 匹配前一个字符出现从m到n次 |
表示边界:
字符 | 功能 |
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
\b | 匹配一个单词的边界 |
\B | 匹配非单词边界 |
匹配分组:
字符 | 功能 |
| | 匹配左右任意一个表达式 |
(ab) | 将括号中字符作为一个 |
\num | 引用分组num匹配到的字符串 |
(?P<name>) | 分组起别名 |
(?P=name) | 引用别名为name分组匹配到的字符串 |
注意:
1:通常在写需要使用正在表达式的地方的字符串 都要加上r 变成原始字符串 例:r’\d/sabc‘
:2:关闭贪婪模式 .+? 加上一个问号来关闭贪婪模式
1 import re 2 3 result = re.match(r‘^1[3578]\d{9}$‘,‘13524567899‘)#匹配电话号码 4 s = result.group() 5 print(s) 6 7 8 a = re.match(r‘[1-9]?\d$|100$‘,‘100‘)#匹配0-100之间的数 9 ss =a.group() 10 print(ss) 11 12 s = re.match(r‘<h1>(.*)</h1>‘,‘<h1>我是大神</h1>‘) 13 sss = s.group() 14 sss1= s.group(1) #带的参数就是提取()分组 带的是几 就提取第几个分组 15 print(sss) 16 print(sss1) 17 18 d = re.match(r‘<(.+)><(.+)>(.+)</\2></\1>‘,‘<a><h1>我要学会正则表达式</h1></a>‘) 19 dd = d.group() 20 print(dd) 21 dd1 = d.group(3) 22 print(dd1) 23 24 y = re.match(r‘[email protected](163.com|qq.com|126.com)$‘,‘[email protected]‘)#后面那个括号(163.com|qq.com|126.com) 表示人选一种都可以 25 yy = y.group() 26 print(yy) 27 28 q = re.search(r‘python‘,‘python is very good‘) #从左到右 查到到匹配的字符就结束 29 print(q.group()) 30 31 f = re.findall(r‘python‘,‘python is good,and I like python‘) #找出所有的匹配项 32 print(f) 33 34 esu = re.sub(‘java‘,‘python‘,‘java is my favortive‘)#将匹配到的字符替换 35 print(esu)