正则表达式的概念和实践

发布时间 2024-01-10 11:35:50作者: Cwenky

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() 正则表达式编译时使用的字符串