Back to Blogs
regex

regex

Soloman
2019-08-23

正则表达式

1 Python 正则表达式

1.1 re.match:匹配成功re.match方法返回一个匹配的对象,否则返回None

import re

re.match(pattern, string, flags=0)
# pattern	匹配的正则表达式
# string	要匹配的字符串。
# flags	标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。多个标志可以通过按位或(|) 它们来指定。如 re.I | re.M

1.2 正则表达式修饰符 - 可选标志flags

alt

1.3 re.search:扫描整个字符串并返回第一个成功的匹配。匹配成功re.search方法返回一个匹配的对象,否则返回None

import re

re.search(pattern, string, flags=0)

1.4 检索和替换:re.sub用于替换字符串中的匹配项。

import re
re.sub(pattern, repl, string, count=0, flags=0)
# pattern : 正则中的模式字符串。
# repl : 替换的字符串。也可为一个函数,对匹配的结果进行操作。
# string : 要被查找替换的原始字符串。
# count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

1.5 re.compile:用于编译正则表达式,生成一个正则表达式( Pattern )对象

import re

re.compile(pattern[, flags])
# pattern : 一个字符串形式的正则表达式
# flags : 可选,表示匹配模式,比如忽略大小写,多行模式等

1.6 findall:在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表

import re

re.findall(string[, pos[, endpos]])
# string : 待匹配的字符串。
# pos : 可选参数,指定字符串的起始位置,默认为 0。
# endpos : 可选参数,指定字符串的结束位置,默认为字符串的长度。

1.7 re.finditer:在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回

import re

re.finditer(pattern, string, flags=0)
# pattern	匹配的正则表达式
# string	要匹配的字符串。
# flags	标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

1.8 re.split:按照能够匹配的子串将字符串分割后返回列表

import re

re.split(pattern, string[, maxsplit=0, flags=0])
# pattern	匹配的正则表达式
# string	要匹配的字符串。
# maxsplit	分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。
# flags	标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等

1.9 正则表达式模式

alt

2 常用正则表达式汇总

在网络爬虫中使用时,根据实际需要修改。

# 匹配中文字符
[\u4e00-\u9fa5]+

# 匹配双字节字符(包括汉字在内)
[^\x00-\xff]+

# 匹配 email 地址
[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?

# 匹配url网址
[a-zA-z]+://[^\s]*
 
# 匹配中国邮政编码
[1-9]\d{5}(?!\d)
 
# 匹配日期2022-02-02
 ([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))

# 匹配身份证号码
(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)
 
# 匹配正整数
 [1-9]\d*

# 匹配负整数
 -[1-9]\d*

# 匹配整数
-?[1-9]\d*

# 匹配非负整数
[1-9]\d*|0

# 匹配非正整数
 -[1-9]\d*|0

# 匹配正浮点数
 [1-9]\d*\.\d*|0\.\d*[1-9]\d*

# 匹配负浮点数
 -[1-9]\d*\.\d*|-0\.\d*[1-9]\d*