正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
在python中提供了re 库,它是关于正则表达式的一个库,里面包含了多种字符串匹配的方法,对于网站上爬取数据后清洗处理有很大的帮助。
\w 匹配字母数字及下划线
\W 匹配f非字母数字下划线
\s 匹配任意空白字符,等价于[\t\n\r\f]
\S 匹配任意非空字符
\d 匹配任意数字
\D 匹配任意非数字
\A 匹配字符串开始
\Z 匹配字符串结束,如果存在换行,只匹配换行前的结束字符串
\z 匹配字符串结束
\G 匹配最后匹配完成的位置
\n 匹配一个换行符
\t 匹配一个制表符
^ 匹配字符串的开头
$ 匹配字符串的末尾
. 匹配任意字符,除了换行符,re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
[....] 用来表示一组字符,单独列出:[amk]匹配a,m或k
[^...] 不在[]中的字符:[^abc]匹配除了a,b,c之外的字符
* 匹配0个或多个的表达式
+ 匹配1个或者多个的表达式
? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
{n} 精确匹配n前面的表示
{m,m} 匹配n到m次由前面的正则表达式定义片段,贪婪模式
a|b 匹配a或者b
() 匹配括号内的表达式,也表示一个组
尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none
语法格式:match(pattern, string, flags=0)
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串 |
flags (标志位) | 用于控制正则表达式的匹配方式 |
匹配成功re.match方法返回一个匹配的对象,否则返回None。
扫描整个字符串并返回第一个成功的匹配
语法格式:re.search(pattern, string, flags=0)
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串 |
flags(标志位) | 用于控制正则表达式的匹配方式 |
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表
注意:match 和 search 是匹配一次,而 findall 匹配所有
语法格式:findall(pattern, string, flags=0)
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串 |
flags | 用于控制正则表达式的匹配方式 |
浏览全部字符串,匹配所有合规则的字符串,匹配到的字符串放到一个列表中,未匹配成功返回空列表
这个函数正好解决了我爬虫过程中对于数据清洗的问题,将多余字符替换为空,下面放个例子详细介绍下
对于输入的一个字符串,利用正则表达式,去实现字符串替换处理,然后返回被替换后的字符串
语法格式:sub(pattern, repl, string, count=0, flags=0)
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
repl | 就是replacement,是被替换的字符串。可以是字符串,也可以是函数 |
string | 表示要被处理,要被替换的那个string字符串 |
count | 对于匹配到的内容,只处理其中一部分,其中count等于多少,就处理多少次 |
flags | 用于控制正则表达式的匹配方式 |
content= '''hello world 123 321'''
str = re.sub('\d+','数字',content)
print(str)
上面例中我匹配多个不连续的数字,替换成“数字”并输出
运行结果:
hello world 数字 数字
该函数根据包含的正则表达式的字符串创建模式对象。可以实现更有效率的匹配
语法格式:compile(pattern [, flags])
参数 | 描述 |
---|---|
pattern | 用compile创建的模式对象 |