Python re 模块深入探索

1.re模块

1.1 常用的函数

(1)匹配函数

  • re.match(pattern, string):从头开始匹配,只要头不匹配就返回None最终只匹配第一个哦

    >>> import re
    >>> string='abc'
    >>> pattern1='bc'
    >>> res = re.match(pattern1, string)
    >>> type(res)
    <class 'NoneType'>
    
    >>> pattern2='ab'
    >>> res = re.match(pattern2, string)
    >>> res
    <re.Match object; span=(0, 2), match='ab'>
    >>> res.span()
    (0, 2)
    
  • re.search(pattern, string):任意位置开始匹配,只要能匹配就好,最终只匹配第一个哦

    >>> res = re.search(pattern1, string)
    >>> res.span()
    (1, 3)
    

    补充知识1: 如果想要得到最终匹配到的所有字符串,可以使用group

    >>> string='bcbc'
    >>> pattern='bc'
    >>> res = re.match(pattern,string)
    >>> res.span()
    (0, 2)
    >>> res2 = re.search(pattern,string)
    >>> res2.span()
    (0, 2)
    >>> res.group()
    'bc'
    >>> res.group(0)
    'bc'
    

    补充知识2: 除了上述的匹配方式外,还可以通过re.compile(pattern) 来创建一个模板对象,供match, search调用

    >>> pattern = re.compile(r'[\d]')
    >>> res = pattern.match('1234')
    >>> res
    <re.Match object; span=(0, 1), match='1'>
    >>> res.group()
    '1'
    

    补充知识3: 如果我们要查找所有匹配的字符串该怎么做呢?使用re.findall(string),这个返回的是list类型哦

    >>> string='bcabc'
    >>> pattern='bc'
    >>> res = re.findall(pattern,string)
    >>> res
    ['bc', 'bc']
    

    进一步,如果我们想查看匹配的位置怎么办呢?使用re.finditer(pattern, string)

    >>> res = re.finditer(pattern,string)
    >>> for i in res:
    ...   print(i.span())
    ...   print(i.group())
    ...
    (0, 2)
    bc
    (3, 5)
    bc
    >>>
    
    

(2)检索与替换

  • re.sub(pattern, repl, string, count):替换最大count次,默认(0)是全部替换

    >>> string='phy-l-jt'
    >>> pattern=r'[\W]'
    >>> count1=0
    >>> res = re.sub(pattern,repl,string,count1)
    >>> res
    'phy*l*jt'
    
    
    >>> count2=1
    >>> res = re.sub(pattern,repl,string,count2)
    >>> res
    'phy*l-jt'
    

    补充知识: 注意上面我使用r'[\W]',这是一种匹配模式哦,能帮助我们快速进行模式的配置,下面我将通过一种综合运用实例来介绍一些常用的用法:
    '^[a-zA-Z0-9''-'\s]{1,30}$',这个例子是参照了这个博客,但是我做了更加深入的探索:
    ① 首先,可以使用'^[a-zA-Z0-9''-'\s]{1,30}$'也可以使用r'^[a-zA-Z0-9''-'\s]{1,30}$'
    ^$中的内容就是要匹配的配置信息
    []中的内容是要匹配的模板
    a-z表示所有小写字母,A-Z表示所有大写字母 ,0-9表示数字的所有可能,''-'表示三种字符''-'\s表示匹配所有的空字符,等效于[\t\n\r\f],那如果是\S就表示匹配非空字符
    ⑤ {1,30}表示至少匹配1次,最多20次
    ⑥ 在补充一点,'[^a-z]'表示的是匹配非小写字母,这里的^不是头匹配的意思啦

(3)分割

  • re.split(pattern, string)

    >>> string='abc'
    >>> pattern='b'
    >>> res = re.split(pattern, string)
    >>> res
    ['a', 'c']
    

    最后,我再提供一些常用的ASCII码对应关系:
    a-z对应97-122
    A-Z对应65-90
    0-9对应48-57

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值