正则表达式--python
一 re 模块,我们可以 import re 模块
1、例:索引一个元素
re.search(r'查找对象','字符串') 返回值为对象,如果想获取,可以对他赋一个值。
m = re.search(r'a','aljgoiimg')
m.group() -> 可以返回第一个 a 元素
m.span() -> 可以返回 a 元素的索引值
2、 re.match() 必须从一开始,正则表达式满足里面条件,才能有东西返回,否则为none
3、 re.findall() 遍历字符串,找到正则表达式匹配的所有位置,并且以列表的形式返回
4、 group() 返回匹配到的字符串
5、 re.compile() 编译正则表达式为模式对象
二 元字符
(1)
. 匹配所有内容 例: re.search(r'.','https://i.cnblogs.com/EditPosts.aspx?opt=1')
注意: . 不匹配换行符(/n)
d 匹配任意数字 例: re.search(r.'d','https://i.cnblogs.com/EditPosts.aspx?opt=1')
注意: d
s 匹配空白符 例:re.search(r.'s','https://i.cnblogs.com/EditPosts.aspx? opt=1')
注意: 为空白符
w 匹配字母或数字或下划线或汉字 注意:没有空格、特殊字符
边界符 例:re.search(r.'is','This is a list') 匹配中间那个is,边界不止是空格,可以是末尾开头等
^ 匹配开头符 例:re.search(r.'^https','https://i.cnblogs.com/EditPosts.aspx? opt=1')
$ 匹配结尾符 例:re.search(r.'$1','https://i.cnblogs.com/EditPosts.aspx? opt=1')
解除元字符本身意义,通过加特殊字符接触
D S W B 是与小写的相反的作用
(2)匹配次数
通过参数后跟{}添加数字,匹配对应的次数
{2} 例: re.search(r.'d{2}','https://i.cnblogs.com/EditPosts.aspx?ss234355.gpg') 匹配前2次
{2,4} 例: re.search(r.'d{2,4}','https://i.cnblogs.com/EditPosts.aspx?ss234355.gpg') 匹配两个或4个数字,以范围大的为准
{,4} 例: re.search(r.'d{,4}','https://i.cnblogs.com/EditPosts.aspx?ss234355.gpg') 等价于{0~4}
{4,} 至少匹配4次
通过 * 或 + 匹配次数
例: URL = 'gegehttps://i.cnblogs.com/EditPosts.aspx?234355.gpgGJEOGIhttps://i.cnblogs.com/EditPosts.aspx?234355.gpgiein'
p = re.compile(r'http:.+.gpg') 可先将 ‘会调用多次的字符串’ 通过re模块里的compile来保存下来
ss = re.search(p,URL) 直接把p放到第一个参数里,URL字符串放到第二个参数里,然后赋值
ss.group() 即可返回截取的特定字符串
注意: 此时截取的字符串里有两个http地址,并没有达到效果。
p = re.compile(r'http:.+?.gpg') 标红部分代替上面的 p ,里面添加了?,使用非贪婪模式,只截取前面一部分就可以了
xx = re.findall(p,URL) 通过findall方法,可将URL里面的两个地址都截取出来,并且放到列表里
(3)子组匹配
1、 通过在[]里添加符号,进行分组匹配,只匹配一个
例: re.research(r'list[,:.!]','lsiaglist,lignt') 那么它会返回 list,这一条,可对比上面的例子提前定义里面那个”list“,很好用。
2、通过在[]里添加[0-9],进行匹配,可分组到数字,跟上面一样
3、通过在[]里添加[字母],进行匹配,可分组到数字,跟上面一样
4、在[]里,^表示除了 例: re.research(r'list[^/d]','lsiaglist,lignt') 它能有数据返回
re.research(r'list[^/d]','lsiaglist7,lignt') 它不能有数据返回
5、在[]里, .表示取自己的本身,没有意义
(4)分组
1、| 表示 或 例:re.research(r'ab | c','lsiaglist,ligntfjklagac') 返回 c
re.research(r'a(b | c)','lsiaglist,ligntfjklagac') 返回 ac
2、 re.research(r'ab*','lsiaglist,ligntfjklagac') 返回a,它表示截取abbbb+,其中*针对的是b,代表0次或多次
re.research(r'ab+','lsiaglist,ligntfjklagac') 无返回值,其中+针对的b,代表1次或多次,例子中无ab组合,所以无法返回