python中用re模块来处理正则表达式,能帮助你检查一个字符串是否和某种模式匹配。正则表达式提供了强大的方式来查找,替换,验证和提取文本数据
常用的场景是用正则表达式来进行网页数据的爬取和存储。
1、正则表达式的模式:
普通字符 | 例如字母,数字,空格可以直接匹配 |
特殊字符 |
例如点号.,星号*,加号+、问号?等,他们具有特殊的含义和功能 |
字符类 | 用方括号[]包围的字符集合,用于匹配方括号内的任意一个字符 |
元字符 |
例如\d,\w,\s,用于匹配特定类型字符,例如数字,字母,空符。 |
量词 |
例如{n},{n,},{n,m},用于匹配指定的次数或范围 |
边界符号 | 例如^,$,\b,\B,用于匹配开头,结尾,或单词边界位置 |
2、特殊字符及含义
字符 | 描述 |
\ | 将下一个字符转换为一个特殊字符 |
^ | 匹配字符串的开始位置 |
$ | 匹配字符串的结束位置 |
* | 匹配前面的子表达式零次或多次。例如po*能匹配"p"和“poo” |
+ | 匹配前面的子表达式一次或多次。例如po+能匹配“po”和“poo” |
? | 匹配前面的子表达式零次或一次。例如do(es)能匹配“do”和“does” |
{n} | n是一个非负整数。匹配确定的n次。例如o{2}能匹配food的两个o,但不能匹配fo的一个o |
{n,} | n是一个非负整数,匹配n次以上。例如o{2,}能匹配fooood,不能匹配fo |
x|y | 匹配x或y |
[xyz] | 字符集合,匹配所包含的任务一个字符。例如[abc],匹配apple的“a” |
[^xyz] | 负值字符集,匹配未包含的任意字符。例如[^abc],匹配apple的'p','l','e' |
[a-z] | 字符范围。匹配指定范围内的任意字符。 |
[^a-z] | 字符范围。匹配未指定范围内的任意字符。 |
\d | 匹配一个数字字符。等价于[0-9] |
\D | 匹配一个非数字字符。等价于[^0-9] |
\n | 匹配一个换行符。 |
\r | 匹配一个回车符。 |
\s | 匹配任意空白字符,包括空格,制表符,换页符等。 |
\S | 匹配任意非空白字符 |
\w | 匹配字母,数字,下划线。 |
\W | 匹配非字母,数字,下划线。 |
(?:pattem) |
匹配模式但不获取匹配的子字符串。即非获取匹配,是匹配模式。例如“industr(?:y|ies)”,能匹配“industry”或“industries”这种模式 |
(?=pattem) | 正向肯定断言。例如windows(?=7|10|2000|NT),能匹配“windows7”的'windows',但不能匹配“wondows2.2”的‘windows’ |
3、特殊字符的优先级
优先级 | 符号 |
最高 | \ |
高 |
()、(?:)、(?=)、[] |
中 | *、+、?、{n}、{n,}、{n,m} |
低 | ^、$ |
次最低 | 串连,即相邻字符连接在一起 |
最低 | | |
4、正则表达式常用的方法
方法 | 解析 |
compile() | 编译正则表打死模式,返回一个对象模式 |
match() | 决定正则表达式对象是否在字符串最开始的位置匹配。注意:该方法不是完全匹配。当模式结束时若 原字符串还有剩余字符,仍然视为成功。想要完全匹配,可以在表达式末尾加上边界匹配符“$” |
search() | 在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回“None” |
findall() | 遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表 |
finditer() | 返回一个迭代器,顺序访问每一个匹配结果,该方法将找到匹配正则表达式的所有子串。 |
split() | 按照能够匹配的子串将原字符串分割后返回列表 |
sub() | 替换原字符中每一个匹配的子串后返回替换后的字符串 |
subn() | 返回sub()方法执行后的替换次数 |
flags() | 正则表达式编译时设置的标志 |
pattem() | 正则表达式编译时使用的字符串 |