正则表达式基础
普通字符包含大小写字母、所有数字、所有标点符号及一些其他符号
普通字符 | 含义 |
---|---|
\W | 匹配非数字、字母、下划线、汉字 |
\W | 匹配数字、字母、下划线、汉字 |
\S | 匹配任意非空白字符 |
\s | 匹配空白字符 |
\D | 匹配非数字 |
\d | 匹配数字 |
元字符在正则表达式中具有特殊含义的专用字符
元字符 | 含义 |
---|---|
. | 匹配任意字符(除换行符\r、\n) |
^ | 匹配字符串的开始位置 |
$ | 匹配字符串的结束位置 |
* | 匹配前一个字符的任意次数(包括0次) |
? | 匹配该字符的前一个字符0次或1次 |
\ | 转义字符,其后的一个元字符失去特殊含义,匹配元字符本身 ;在字符串前加r也可以r’str’ |
() | ()中的表达式称为一个组,组匹配到的字符都能被取出 |
[] | 匹配范围内任意字符 |
| | 将匹配条件进行逻辑或运算 |
用正则表达式提取数据
1.findall()
findall()函数能提取满足正则表达式的所有字符串
import re
str11='123qwer'
print(re.findall('(\w+)q(\w+)',str11))
爬虫中使用
import requests
import re
url='https://www.cnblogs.com'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.62'}
response=requests.get(url=url,headers=headers).text
ex = '<a class="post-item-title".*?target="_blank">(.*?)</a>'
print(re.findall(ex,response,re.S))
2.search 函数()
search只会匹配第一个满足正则表达式的,匹配后用group函数取值
import re
str1='123Qwe!_@#你我他'
ret=re.search('\w',str1)
print(ret.group())
3.match函数()
match函数与Search类似,但是是从开头匹配,如果开头不满足,后面满足的也不会被匹配到
4.finditer函数()
finditer与findall功能差不多,区别是findall返回的是一个列表,finditer返回的是一个迭代器,需要利用循环来取值
import re
str1='123Qwe!_@#你我他'
ret=re.finditer('\w', str1)
for i in ret:
print(i.group(),end='')