Re正则表达式

re正则表达式总结

  • 0、一般字符


    字符意义
    .a.c → abc,aic,a&c等(不包括换行符
    \转义字符,让字符变回原来的意思
    […]在括号中任选一个:a[bcd] → ab,ac,ad


  • 1、预定义字符

    字符意义
    \d匹配一个数字字符,等价于[0-9]
    \D匹配一个非数字字符,等价于[^0-9]
    \s匹配任何空白字符如空格、制表符、换页符等等价于[\f,\n,\t,\r,\v]
    \S非空白字符等价于[^\f,\n,\t,\r,\v]
    \w匹配任意字母(包括下划线)等价于[A-Z,a-z,0-9,_]
    \W匹配非单词字符为\w取反


  • 2、数量词

    字符意义
    *匹配前一个字符0或无限次,如ab*c → abbc,ac,abc等
    +匹配前一个字符1或无限次,如ab+c → abc,abbc,abbbc等
    匹配前一个字符0或1次,如ab?c → ac,abc,
    {m}匹配前一个字符m次
    {m,n}匹配前一个字符m到n次

    数量词跟在. 预定义字符等后面表示该字符的数量比如:\d?表示0到无穷个数字字符。

  • 3、边界匹配(了解,爬虫中很少用)

    字符意义
    ^匹配字符串的开头,如^abc → 匹配以abc开头的字符串
    $匹配字符串的结尾,如abc$ → 匹配以abc结尾的字符串
    \A
    \Z

  • ",*?"匹配任意字符

---
  • 4、修饰符

    修饰符主要配合后面的各种方法使用

    字符意义
    re.I使匹配对大小写不敏感
    re.L做本地化识别匹配
    re.M多行匹配,影响^和$
    re.S使匹配包括换行符在内的所有字符(做多行匹配时用)
    re.U根据Unicode字符集解析字符。影响\w,\W,\b,\B
    re.X给予更灵活的格式,以便将正则表达式写得更易理解

    使用的最多的是re.S ,当要匹配的内容有多行时可以使用这个修饰符.

    例如:findall()方法是逐行匹配的,当某行没有匹配到数据时就会从下行开始,这时可以用re.S修饰符使它不再从头开始匹配。


    import re

    a = ‘’‘<某标签>数据

    <某标签>’‘’

    word = re.findall(‘<某标签>(.?)<某标签>‘,a)

    print(word)

    结果得到一个空列表,若加上re.S修饰符即 word = re.findall(’<某标签>(.?)<某标签>’,a,re.S) 则会打印"数据 "。


  • 5、search()、sub()、findall()方法

    findall(pattern,string,flag = 0)
    - para:
    - (1)pattern : 要匹配的正则表达式
    - (2)string : 要匹配的字符串
    - (3)flags : 标志位(即修饰符),用于控制正则表达式的匹配方式,比如换行匹配,是否区分大小写等。
    这里要注意一个问题,在findall中如果想要子模式或者捕获分组之类的如(the|The)、(\d)$1等要用中括号"[]"否则findall会只匹配括号内的匹配项比如: <...>(.*?)<\...>这个pattern用findall结果是不带<...>标签对的,而search()方法就不会有这个问题。
    search(pattern,string,flags = 0)
    - para:
    - (1)pattern : 要匹配的正则表达式
    - (2)string : 要匹配的字符串
    - (3)flags : 标志位(即修饰符),用于控制正则表达式的匹配方式,比如换行匹配,是否区分大小写等。

    search方法用于在给定的字符串中搜索与指定的模式匹配的内容,并返回一个匹配对象(Match object)。匹配对象是包含匹配结果的特殊对象,它具有各种属性和方法,可用于获取有关匹配的详细信息。如果找到了匹配项,则search方法返回匹配对象;如果没有找到匹配项,则返回None。
    例:
    import re
    a = 'one1two2three3'
    infos = re.search('\d+',a)
    print(infos)

    结果:<_sre.SRE_Match object; span(3,4),match='1'>
    print(infos.group())#可以通过group方法获取匹配对象的值。在这种情况下,match.group()返回整个匹配项,match.group(1)返回第一个捕获组,match.group(2)返回第二个捕获组
    search方法只返回第一个匹配项,因此它通常用于判断是否存在匹配项或仅需获取第一个匹配项的情况。而findall方法适用于需要获取所有匹配项的情况,且findall方法返回的是一个列表。


    sub(pattern,repl,string,count = 0,flags = 0)
    - para:
    - (1)pattern: 要匹配的正则表达式
    - (2)repl: 要用来替换的字符串
    - (3)string: 要被查找替换的原始字符串
    - (4)count: 模式匹配后替换的最大次数,默认0表示替换所有的匹配
    - (5)flags: 标志位,同search

    例:将123-456-789中的"-"去掉
    import re
    phone = '123-456-789'
    new_phone = re.sub('\D','',phone)
    print(new_phone)
    结果为:123456789
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值