Python学习之路:正则表达式

正则表达式(regular expression)是⼀种⼴泛⽤于匹配字符串的⼯具。它⽤⼀个“字符串”来描述⼀个特征,然后去验证另⼀个“字符串”是否符合这个特征,并获取匹配后的结果。

  1. 普通字符
    字⺟、数字、汉字、下划线、以及没有特殊定义的符号,都是"普通字符"。正则表达式中的普通字符,在匹配的时候,只匹配与⾃身相同的⼀个字符。

  2. 元字符
    . 除\n外的任意一个字符
    | 逻辑或
    [] 匹配字符集中的一个字符
    [^] 对字符集取反
    [-] 在[]中的取值区间
    \ 转义字符
    () 对表达式进行分组,将圆括号内的内容看成一个整体,并获得匹配的值。

    分组使用举例:
    ()内的字符串是一个单独整体,可独立使用|
    r1 = re.match(r’\w{4,20}@(163|126).com$’, q).group()
    \1表示引用第一个分组的内容,\2引用第二个分组内容,以此类推。
    r2 = re.match(r’<(\w*)>(.*?)</\1>’, html_str).group()

  3. 转义字符串
    ⼀些⽆法书写或者具有特殊功能的字符,采⽤在前⾯加斜杠""进⾏转义的⽅法。
    \r \n 回车 换行
    \t 制表符
    \
    ^ 匹配^
    $ 匹配$
    . 匹配.
    在正则表达式中具有特殊意义的字符需要匹配自身时都需要转义。还有|,(,[,*,?

  4. 预定义匹配字符集
    \d 任意一个数字,即0-9
    \D \d的反集
    \w 任意一个大小写字母或者数字或者下划线,即0-9a-zA-Z_
    \W \w的反集
    \s 换行符,空格,制表符任意一个
    \S \s的反集

#匹配任意的数字字符串
re.match(r’\d+’, s)
#匹配任意的字符串,不包含特殊字符
re.match(r’\w+’, s)

  1. 重复匹配
    {n} 表达式重复n次
    {m,n} 表达式重复至少m次,最多n次
    {m,} 表达式重复至少m次,没有上限
    ? 匹配表达式0次或者1次,相当于{0,1}
    +表示最少出现一次,没有上限,相当于{1,}
    *表示出现0次到任意次,相当于{0,}

  2. 位置匹配
    ^ 在字符串开始的地方匹配,符号本身不匹配任何字符
    re.match(r’^a’, ‘abcd’) 以a开头
    $ 在字符串结束的地方匹配,符号本身不匹配任何字符
    re.match(r’d$’, ‘abcd’) 以d结尾

    匹配163邮箱
    re.match(r’\w+@(163|126).com$’, s)

    \b 匹配一个单词边界,就是单词和空格之间的位置,符号本身不匹配任何字符
    \B 匹配非单词边界,即左右两边都是\w范围或者左右两边都不是\w范围时的字符缝隙。

  3. 贪婪模式和非贪婪模式
    贪婪匹配:在重复匹配时,尽可能多的匹配到字符
    非贪婪匹配:在重复匹配时,尽可能少的匹配到字符,写法是在匹配次数的特殊符号后面再加上一个?问号。

  4. Python中重要的正则表达式模块re
    常用的方法有:

    group() ,groups()
    当匹配到数据时,使用group提取数据,groups()返回元组。
    当没有匹配到数据时(None),调用时报错

    match() 只匹配一次目标字符串。特点是从字符串开始匹配,而且仅匹配一次,匹配不到即返回None

    search(匹配表达式, 匹配目标字符串, 模式),特点是从字符串全文搜索匹配,而且仅匹配一次,匹配不到即返回None

    findall() 匹配字符串全文的所有符合字符,返回list。特点是弥补了match和search只匹配一次的缺点,属于贪婪匹配模块。

    compile(正则表达式, flag模式),注意flag模式,re.S 多行匹配(.也匹配到\n)
    根据正则表达式的字符串创建模式对象,re的工厂方法,可提高匹配效率,返回一个re对象

    举例:
    regu = re.complie(r’\w+@(163|126).com$’)
    result = regu.match(‘123456@163.com’)
    print(result.group())

    split() 切割,返回list

    举例:
    import re
    s = ‘ab;cd|efg|hi|hi,jkl\topq;str,ubw\x07syd’
    实现递归分割所有字符的功能
    print(re.split(r’[,;|\t]+’, s))

    sub() 替换,类似str的replace方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值