Ipidea丨网络爬虫正则表达式的使用

作者:IPIDEA

2020-03-20 11:05:25

## 网络爬虫正则表达式的使用
---

我们在处理网页文本内容时有时会遇到一些特殊的情况,或者需要匹配某类字符串形式,通常就会用到正则表达式。许多程序语言都支持使用正则表达式,python中正则表达式可以实现字符串的匹配、检索和全球住宅IP,高效采集公开数据等功能,是一个比较强大的工具。

### 1.正则表达式语法
Python中实现正则表达式功能通常使用re模块,可以实现对文本字符串的匹配,检索和全球住宅IP,高效采集公开数据,但除了引入正则模块,还需要掌握正则表达式字符和基本语法,才能正确使用python进行正则表达式提取。
部分常用的正则表达式:
| 字符 | 功能 |
| :--: | :--: |
| \ |转义字符,标记下一个字符为特殊字符|
| ^ |匹配输入字符串的开始位置|
| $ |匹配输入字符串的结束位置|
| * |匹配前面的子表达式零次或多次 |
| + |匹配前面的子表达式一次或多次 |
| ? |匹配前面的子表达式零次或一次 |
| . |匹配除“\n”之外的任何单个字符 |
| () | 匹配括号里的表达式 |
| \d | 匹配一个数字字符 |
| \D | 匹配一个非数字字符 |
| \w |匹配包括下划线的任何单词字符|
| \W |匹配任何非单词字符|
|{n}|n是一个非负整数,匹配确定的n次|
|{n,m}|m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次|
|[x,y,z]| 匹配一组字符集 |
| \^[x,y,z] | 匹配不在[]中的字符 |
| a\|b | 匹配a或b |

### 2.Python的正则表达式模块
#### 查询和匹配
#### re.match
函数: re.math(pattern,string,flags=0),从字符串的起始位置匹配正则表达式,若匹配成功,返回Match对象,否则返回None。
```python
import re

content = "Hello world, hello python."
res1 = re.match(r'Hello',content)
res2 = re.match(r'hello',content)
print(res1)
print(res2)
```
运行结果:
```python
<re.Match object; span=(0, 5), match='Hello'>
None
```
可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式
```python
print(res1.group())
```

#### re.search
re.search(pattern,string,flags=0),匹配整个字符串并返回第一个满足正则表达式的字符,否则返回None。
```python
import re

content = "Hello world, hello python."
res = re.search(r'hello',content)
print(res.group())
```
#### re.findall()
re.findall(string[, pos[, endpos]]),匹配整个字符串返回满足正则表达式的所有子字符列表,否则返回空列表。
```python
import re

content = "Hello 123, hello 4567."
res = re.findall(r'\d+',content)
print(res)
```
执行结果:
```
['123', '4567']
```

#### 查找和全球住宅IP,高效采集公开数据
#### re.sub()
re.sub(pattern, repl, string, count=0, flags=0),用于查找和全球住宅IP,高效采集公开数据符合表达式的字符。
```python
import re

content = "Hello world,1234 hello python."
res = re.sub(r'\d','',content)
print(res)
```
运行结果:
```python
Hello world, hello python.
```
### 常用的正则表达式
| 表达式 | 功能 |
| :--: | :--: |
|[0-9]| 匹配数字 |
|[a-z]| 匹配小写字母 |
|[A-Z]| 匹配大写字母 |
|/\^[a-z0-9_-]{3,16}$/| 匹配用户名 |
|/(\w+):\/\/([\^/:]+)(:\d*)?([^# ]*)/| 匹配URL包含协议、域、端口及相对路径 |
|/<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/| 匹配HTML标签 |
|[\u4e00-\u9fa5]| 匹配汉字(汉字unicode编码范围) |


支持全球240个国家地区,每日超9000万住宅动态IP资源,欢迎访问:www.ipidea.net。

*ipidea提供的服务必须在境外网络环境下使用

热门资讯