python基础知识14-正则表达式

1.正则表达式

正则可以代替其他任何工具,但是其他工具不能完全代替正则.

1.匹配或提取字符串的工具,基于所有语言之上的工具.

正则表达式所面向的问题

判断一个字符串是否匹配给定的格式,如判断用户注册账号是否满足格式.

从一个字符串中按指定格式提取信息.抓取页面中的链接.

判断用户提交的邮箱的格式是否正确:

一个或多个字母或数字@一个或多个字母或数字.com,r'^[a-zA-Z0-9]+@[a-zA-Z0-9]+\ . com$'

import re #导包

res = re.findall(r'^[a-zA-Z0-9]+@[a-zA-Z0-9]+ \ . com$','[email protected]') #能匹配的转化为列表项目.

注意:如果正则表达式中使用了括号,那么findall函数匹配的结果只会是括号中的内容,而不是完整的匹配.

因此我们可以利用这种机制来完成对需要部分数据的提取.

一个函数:re.findall(pattern,string) #

mymail = re.findall(r'aaa',mystr) #第一个参数是正则表达式,第二个参数是要查找的字符串内容.

2.元字符

本身具有特殊含义的字符:

^ 脱字符

一些元字符: . * ? + [ ] () \ ^ $

通过 \ 转义来匹配这些字符本身.

写正则的规则不要随便加空格

\ 转义符,转义正则表达式的规则

r 转义的python字符串,需要两层转义.

通过()来改变findall的行为

. 点代表任意一个字,强制占位,必须有一个字符.

锚点元字符

功能锁定行首, ^ 位置放在行首

功能锁定行尾 $ 位置放在行尾

单词边界(不是元字符): \b

a = 'hello world i am abcd today i say helloworld'

mymail = re.findall(r'\bhello\b',a) #只匹配到一个hello,因为后面的hello在单词中.

3.重复元字符

大括号{}来控制次数,修饰前面的字符.

a = 'abbbbbbbbc'

mymail = re.findall(r'ab{8}c') , {8}表示前面的b有8个, {2,8}表示可以匹配2到8个之间.{2,}表示后面2到正无穷.前面不写表示最多8个,即0-8个.包括空字符(其实是其他字符的位置)也会匹配.不要在{}中随意加空格.

[0-9]表示数字0到9

除此之外还有三个比较特殊的代表次数的 * + ?

mymail = re.findall(r'',str)

*代表 0 到正无穷 ,修饰前面的字符规则{0,}

+代表1到正无穷.{1,}

?代表不能多于一个,如果多于一个就匹配不到.{0,1}

N个{N}

M~N个:{M,N}

至少M个{M,}

4.贪婪与非贪婪

加问号变成非贪婪模式,尽可能少的去匹配字符.

非贪婪:在元字符后面加一个?,就可以变成非贪婪模式. 与在规则后面加问号不同.

任意多个:*?

一个或多个:+?

一个或没有: ??

规则+元字符+贪婪

mystr = 'abbbb'

mymail = re.findall(r'ab*?',mystr)

5.| 选择元字符,

a = 'happy today i am happy hahaha'

mymail = re.findall(r'happy|haha|today',a)

 

6.字符组 [ ]

[abc],整个中括号相当于一个字符,查找其中的一个,一个一个位置分开匹配.两个中括号相当于2个字符.

[0-9]{3},用大括号来控制次数.表示3个数字.

[A-Za-z0-9]表示大小写加数字,可表示邮箱或者首字母的命名规范.

不可以随意加逗号,只有在大括号{}表示区间的时候加逗号.

7.反向字符类 [^]

如果脱字符^写在字符组外面,代表锁定行首

如果写在字符组里面,代表反向字符类,(即 除括号内字符之外)

字符组[...] 反向字符类:...

有一对(),代表只会提取括号里面的内容.括号外面的当作一个标记

转义\,取消某些特殊字符的含义,让其变成普通字符.

mymail = re.findall(r'href = "(.*?)"',mystr),括号代表只提取括号里面的内容,外面的只是标记.

还有re.match,代表从开头开始匹配.

re.search ,代表任意位置只匹配一个,找不到就返回NONE,只匹配第一个

re.sub 替换, re.sub(r'href', 'haha', mystr),比字符串的replace好用.原本的字符串替换成新的字符串.

8.预定义字符组问题引入

\d \D 任意数字\非数字字符组

\s \S任一空白,非空白字符

\w \W 任一字母数字\非字母数字字符

记法:上下左右除去a.

猜你喜欢

转载自www.cnblogs.com/winfun/p/10983880.html