pattern正则表达式

正则表达式

正则表达式 提供了一种字符串的匹配模式(pattern)

1. []  #代表一个原子表 
    [a] #匹配字母a
    [abc] #匹配a或者b或者c
    [a-z] #匹配任意一位小写字母
    [A-Z] #匹配任意一位大写字母
    [a-zA-Z] #匹配任意一位字母
    [0-9]
2. ^ #以...作为开头 \A
    ^a  #匹配以字母a作为开头
    ^abc#匹配以字母abc作为开头
    ^[abc]#匹配 以a/b/c字母作为开头的
    [^abc]#匹配 以a/b/c字母以外作为开头的
    [^a-zA-Z]
3. $ #以...作为结尾  \Z
    ^[1][3-8][0-9]{9}$
    ^[1][34678][0-9]{9}$
4. {m} #表示匹配前面的表达式的m次
    [a][b][c][a][b][c]
    abc{2}
    1[a-z]{2}
5. {m,n} #表示匹配前面的表达式的m-n次
    [1-9][0-9]{4,10}
6. {m,}#表示匹配前面的表达式至少m次

7. ? #表示前面的表达式 可有可无
    [1-9][0-9]?
    [1-9][0-9]{0,1}
8. . #匹配除了换行符以外的任意一个字符 \n
    .{2}
9. * #匹配前面的表达式 0次到多次
    .* #匹配除了换行符以外的任意字符任意次 贪婪模式
    .{0,}
    .*? #匹配除了换行符以外的任意字符任意次 拒绝贪婪模式
10. + #匹配前面的数量一次到多次
    .+ #匹配除了换行符以外的任意字符至少1次 贪婪模式
    .{1,}
    .+? #匹配除了换行符以外的任意字符最少1次 拒绝贪婪模式
11. () #1. 代表一个单元  2.子存储

12. | #或
    a|b
    #匹配abc 或者 abd
    ab(c|d)

正则修正符

re.I  不区分大小写
re.M 改变^和$的行为
re.S 改变.的行为

特殊意义的字符

\d    [0-9]
\D    [^0-9]
\w    [0-9A-Za-z_]
\W    [^0-9A-Za-z_]
\s    匹配空白字符
\S    匹配非空白字符

正则常用函数

import re

(1) re.findall(pattern,string,flages)

匹配所有 以列表形式返回 匹配失败 返回空列表

例如:
myStr = """
<a href="http://www.baidu.com">百度</a>
<A href="http://www.id97.com">电影网址</A>
<a href="http://www.taobao.com">淘宝</a>
<a href="www.taobao.com">淘宝2</a>
<a href="http://www.dj.com">京
东</a>
"""
re.findall("<a href=\"http://.*?\">.*?</a>",myStr,re.S)
dataList = re.findall("<a href=\"http://.*?\">.*?</a>",myStr,re.I)
dataList = re.findall("<[aA] href=\"http://.*?\">.*?</[aA]>",myStr,re.S)
dataList = re.findall("<a href=\"http://.*?\">.*?</a>",myStr,re.S)

(2) re.match(pattern,string,flages)

只匹配一次 使用group进行取值

匹配成功 返回对象

匹配失败 返回None

注意:
  1. 从第一位开始匹配
  2. 只匹配一次

(3) re.search(pattern,string,flages)

匹配成功返回 对象

匹配失败 返回None

注意:
  1. 只匹配一次
  2. 只要字符串中包含就可以

(4) re.sub(pattern,string,myStr,count,flages)/re.subn 正则的替换

返回替换后的结果

sub 和 subn的区别 sub只返回替换的结果 subn返回 替换后的结果和替换次数

实例
myStr3 = "1970/01/02"
#02日01月970年
print(re.sub("(\d{4})/(\d{2})/(\d{2})","\\3日\\2月\\1年",myStr3))
print(re.subn("(\d{4})/(\d{2})/(\d{2})","\\3日\\2月\\1年",myStr3))
括号中的值 依次类推

(5) re.split(pattern,string,maxsplit,flags) 正则的拆分

将字符串 拆分成列表

实例
print(re.split("\W",myStr)) #数字字母下划线以外的字符作为拆分条件  默认拆分所有
print(re.split("\d",myStr,1)) #数字作为拆分条件 只拆分一次
print(re.split("[a-z]",myStr,flags=re.I)) #字母作为拆分条件 拆分所有

(6) re.finditer(pattern,string,flags) 以迭代器的形式 返回匹配的结果

匹配所有

实例
myStr = "abcDMegf23768uuii"
reIter = re.finditer("[a-z]",myStr,re.I)
# print(reIter)
print(next(reIter).group())

(7) re.compile(pattern,flags)

执行效率高 将正则和字符串 分开

实例
pattern = re.compile("<a href=\"https://book.douban.com/subject/[0-9]+/\">(.*?)</a>",re.DOTALL|re.IGNORECASE|re.MULTILINE)  #compile的修正符号
# print(pattern)
print(pattern.findall(data))
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值