Loading

正则表达式和re模块

1.正则表达式

正则表达式是对字符串操作的一种逻辑公式,就是用事先约定好的一些具有特殊意义的字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

然后借助re模块,把字符串中满足此"规则字符串"的子字符串全部找出来,正则表达式是一个不可分割的整体.

用来做字符串匹配的,快速的匹配你想要的信息,是一门独立的语言是对一种匹配字符串规则的描述,与python没有关系,可以应用到所有语言中.
python中用re模块来操作正则表达式
如果一个字符串一个位置的字符不会变化,那么没有必要使用正则,就用不变的字符本身就可以匹配上.
例如:规则是三条腿,找出世界上所有三条腿的事物,三条腿就是规则
结果:桌子,椅子,蛤蟆~。~
再例如:高帅富
结果:你~。~当然还有我~,~
有了正则表达式,可以让你的变成更加简洁,不用写大量的python来判断用户输入的信息是否合法
接下来就是学习一堆特殊符号的含义
while True:
    phone_number = input('please input your phone number : ')
    if len(phone_number) == 11 \
            and phone_number.isdigit()\
            and (phone_number.startswith('13') \
            or phone_number.startswith('14') \
            or phone_number.startswith('15') \
            or phone_number.startswith('18')):
        print('是合法的手机号码')
    else:
        print('不是合法的手机号码')
判断手机号是否合法

有了正则表达式

import re
phone_number = input('please input your phone number : ')
if re.match('^(13|14|15|18)[0-9]{9}$',phone_number):
        print('是合法的手机号码')
else:
        print('不是合法的手机号码')
View Code

1.1字符组[]

同一个位置上可以出现的字符的范围

字符组里面描述的规则如果满足一个,那么就是匹配上了

放到字符组里面现原形的有   .   |   [   ]   (   )
.放[]外面表示任何字符,除了换行符,放到[]里面就是.不用加\来转义,其他一样

[^]除了字符组里面的字符范围都可以,^必须放在字符组的最开头

1.2元字符

\b    匹配一个单词的边界  ing\b以ing结尾的单词  \babs以abs开头的单词

1.3量词

1.4 $ ^ |

$:表示必须从头开始

^:表示必须以此结尾

|表示或,是种短路运算,只要前面规则满足了,就不会走后面的规则,即前真则停,前假找后

因此要把复杂的规则放在前面

1.5实例

正则 待匹配 匹配结果
李.? 李杰和李莲英和李二棍子李

李杰
李莲
李二

李后面的字符串可以是任意的可有可无,但是会尽量多的去匹配,只有李后面没有了才只匹配李,

因为正则表达式默认是贪婪模式,尽可能去匹配多的字符串

1.6贪婪匹配

使用的是回溯算法,先尽可能远的往后走,直到不匹配之后才回头

量词后面加?取消贪婪匹配

 

正则 待匹配 匹配结果
李.?? 李杰和李莲英和李二棍子李




第一个问好是量词0/1,第二个问好是取消贪婪匹配,那么就是0了,所以匹配结果全是李

1.7分组

正则里面的分组:为了把多个匹配规则连在一起用量词约束.

re模块里面的分组:是为了更好的获取数据,并且可以给一个分组起名字.

1.8   .*?x这个组合用的很多,尤其爬虫里面用的更多

. 是任意字符
* 是取 0 至 无限长度
? 是非贪婪模式。
何在一起就是 取尽量少的任意字符,一般不会这么单独写,他大多用在:
.*?x   就是取前面任意长度的字符,直到一个x出现
亮点1:就在?取消了贪婪匹配和后面的x,如果没有x那么只会尽可能少的匹配,只有0
亮点2:?x的连用,充分利用了回溯算法,没有?取消贪婪模式,就会无限的向后匹配字符,有了?取消了贪婪匹配,尽管尽可能少的匹配,但是后面有个x,
那么就会先无限向后找,直到找到x,那么就到x停止,向回告诉前面*匹配到了x之前
亮点3:*的目的其实是把不想要的数据过滤掉,需要的数据加上分组,借助re模块就可以把想要的数据获取到

posted @ 2019-09-30 08:27  浅忆尘  阅读(120)  评论(0编辑  收藏  举报