re正则表达式
正则表达式实用目的:1.判断用户输入的数据是否符合要求 2.爬取数据筛选自己想要的信息
匹配单个字符:
字符 | 功能 |
. | 匹配任意1个字符(除了\n) |
[] | 匹配[]中列举的字符中的一个 |
\d | 匹配数字,即0-9 |
\D | 匹配非数字,即不是数字 |
\s | 匹配空白,即空格 tab键 |
\S | 匹配非空白 |
\w | 匹配单词字符,即a-z,A-Z,0-9,_ |
\W | 匹配非单词字符 |
匹配多个字符:
字符 | 功能 |
* | 匹配前一个字符出现0次或者无限次,即可有可无 |
+ | 匹配前一个字符出现1次或者无限次,即至少一次 |
? | 匹配前一个字符出现1次或者0次,即要么有1次,要么没有 |
{m} | 匹配前一个字符出现m此 |
{m,n} | 匹配前一个字符出现从m到n次 |
匹配开头结尾:
字符 | 功能 |
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
匹配分组:
字符 | 功能 |
| | 匹配左右任意一个表达式 |
(ab) | 将括号中字符作为一个分组/括号好可以单独取出括号内的内容 |
\num | 引用分组num匹配到的字符串 |
(?P<name>) | 分组起别名 |
(?P=name) | 引用别名为name分组匹配到的字符串 |
re高级用法:
1.math(pattern, string [,flags]):从字符串开始处匹配
pattern 模式字符串(正则表达式)
string 要匹配的字符串
[flags] 可选参数,表示标志位,用于控制匹配方式。比如是否区分大小写
2.sarch(pattern, string [,flags]):在整个字符串中搜索第一个匹配的值
3.findall(pattern, string [,flags]):在整个字符串中搜索所有符合正则表达式的字符串 —— 返回一个列表
4.sub(pattern, repl, string [,count] [,flags]):替换字符串
count 可选参数,表示匹配后替换的最大次数
repl 要替换成的字符串(也可以是一个函数),例:
1 import re 2 3 4 def add(temp): 5 # 通过匹配到的字符串的引用调用group方法可以取匹配的字符串的值,即"997"和"99" 6 str_num = temp.group() 7 new_num = int(str_num) + 1 8 # 返回什么,正则表达式中匹配的字符串替换成什么 9 return str(new_num) 10 11 12 # sub中替换的内容为一个函数时,会将正则表达式匹配到的字符串的引用传入到函数内部 13 ret = re.sub(r'\d+', add, "years = 997") 14 print(ret) 15 16 ret = re.sub(r'\d+', add, "years = 99") 17 print(ret) 18 19 # 结果: 20 years = 998 21 years = 100
5.split(pattern, string, [,maxsplit] [,flags]]:分割字符串,例:
按冒号(:)或者空格 将字符串切割,返回一个列表
1 import re 2 3 ret = re.split(r':| ', 'https://www. baidu. com') 4 print(ret) 5 6 # 结果: 7 ['https', '//www.', 'baidu.', 'com']