正则表达式
正则表达式:是对字符操作的一种逻辑公式,,一般使用正则表达式对字符串进行匹配和过滤
优点:灵活、功能性强、逻辑性强。
缺点:上手难,一旦上手,会得心应手。
元字符:正则表达式的灵魂
1.字符组
字符组很简单就是用[]括起来,在[]中出现的内容会被匹配。
2.简单元字符(常用):匹配一个字符
. :匹配除换行符以外的任意字符
\w : 匹配数字或字母或下划线
\s : 匹配任意的空白字符
\d : 匹配数字
\n : 匹配一个换行符
\t :匹配一个制表符
\b :匹配一个单词的结尾
^ :匹配字符串的开始
$ :匹配字符串的结尾
\W : 匹配非数字或字母或下划线
\D :匹配非数字
\S :匹配非空白符
a|b: 匹配字符a或字符b
() : 匹配括号内的表达式,也表示一个组
[...] : 匹配字符中的字符
[^...]: 匹配除了字符组中字符的所有字符
3.量词 :匹配多个字符
* :重复零次或更多次
+ : 重复一次或更多次
?:重复零次或一次
{n}:重复n次
{n,}:重复n次或更多次
{n,m}:重复n次到m次
4.惰性匹配和贪婪匹配
在量词中*,+,{}都属于贪婪匹配,就是尽可能多的匹配到结果。
str:美丽富饶的沙河欢迎你的到来
reg:美丽.*
结果:美丽富饶的沙河欢迎你的到来
在使用.*后面如果加了?则是表示尽可能的少匹配,表示惰性匹配
str:美丽富饶的沙河欢迎你的到来
reg:美丽.*?
结果:美丽
str: <div>老男孩</div>
reg: <.*>
结果:<div>老男孩</div>
str: <div>老男孩</div>
reg: <.*?>
结果:<div>
</div>
str: <div>老男孩</div>
reg: <(div|/div*)?>
结果:<div>
</div>
.*?x的含义比较特殊,找到下个x为止
str: poiuhgntyxnghjdxdngh
reg:.*?x
结果:poiuhgntyx
nghjdx
5.分组
在正则中使用()进行分组。
6.转移
在正则表达式中,有很多特殊意义的元字符,比如\n和\s等,如果要在正则中匹配到正常的\n而不是换行符,就需要对"\"进行转移
变成"\\"。在python中,无论是正则表达式,还是待匹配的内容,都是以字符串的形式出现的,在字符串中\也有特殊的含义,
本身还需要转义,所以如果匹配一次"\n",字符串中要写成"\\n",那么在正则中就要写成"\\\\n",相比较比较麻烦。
这是就需要用到转义r"\n"这个概念,此时的正则就是r"\\n"了。