关于python中正则表达式的一些笔记

本文深入介绍了正则表达式的基本概念和使用技巧,包括匹配规则、基础与进阶语法,并通过实例解释了^和$的作用。同时,文章强调了在匹配邮件地址等场景中正则表达式的正确使用,以及如何利用group进行分组提取。通过示例代码展示了group(0)与group(1)的区别,并给出了提取Email地址中用户名的函数实现。最后,提醒读者理解正则表达式在匹配时的灵活性。
摘要由CSDN通过智能技术生成

阅读前请看一下:我是一个热衷于记录的人,每次写博客会反复研读,尽量不断提升博客质量。文章设置为仅粉丝可见,是因为写博客确实花了不少精力。希望互相进步谢谢!!

1、笔记:

  • 1、什么是正则表达式?

    正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的



  • 3、你可能注意到了,‘py’也可以匹配’python’,但是加上^py$就变成了整行匹配,就只能匹配’py’了,why?

    import re
    print(re.match('py', 'python'))
    #Output : <re.Match object; span=(0, 2), match='py'>   说明匹配成功
    print(re.match('^py$', 'python'))
    #Output : None                                         说明匹配失败
    

    ‘py’ 之所以能 匹配 ‘python’ ,其实这里只匹配了一部分,我们可以用group进行一个分组的提取,如下:

    m = re.match('(py)', 'python')
    print(m.groups())
    #Output : ('py',)     证明只匹配了前面一小部分
    

    ‘^py$’ 之所以不 匹配 ‘python’ ,是因为代表了从p开始y结束,故不匹配


  • 4、关于匹配的问题:

    如果去判断一个邮件地址合不合法,一定要判断全,不能类似【‘py’ 匹配 ‘python’】,即便返回能匹配,但其实没有真正的判断。


  • 5、关于goups分组提取的问题:

    【group(0)永远是原始字符串,group(1)、group(2)……表示第1、2、……个子串。】
    【group(0)永远是正则匹配的字符串,group(1)、group(2)……表示第1、2、……个子串。】

    >>> import re
    >>> pattern = re.compile(r’(\d+)\w*?(\d+).‘) # 匹配:数字+字母+数字+任意字符
    >>> pattern.match(‘132in234dhu’).groups()
    (‘132’, ‘234’)
    >>> pattern.match(‘132in234dhu’).group(0)
    ‘132in234dhu’
    >>> pattern.match(‘132in234dhu’).group(1)
    ‘132’
    >>> pattern = re.compile(r’(\d+)\w
    ?(\d+)') # 匹配:数字+字母+数字 (剩余内容不匹配)
    >>> pattern.match(‘132in234dhu’).groups()
    (‘132’, ‘234’)
    >>> pattern.match(‘132in234dhu’).group(0)
    ‘132in234’ # 注意这里!group(0)返回的不是原始字符串,而是与正则表达式匹配的字符串!!!
    >>> pattern.match(‘132in234dhu’).group(1)
    ‘132’


  • 6、**关于group分组提取字符串时,不一定需要全部匹配,可以只匹配需要提取的那部分,**例如:

    版本二可以提取出带名字的Email地址:
    tom@voyager. org => Tom Paris
    bob@example. com => bob

    代码如下:

    def name_of_email(addr):
        re_addr = re.compile(r'<?([A-Za-z\s]+)>?')  #提前编译,匹配时只用匹配需要的前面那部分即可
        name = re_addr.match(addr).group(1)
        return name
    
    def main:
    	# 测试:
    	assert name_of_email('<Tom Paris> tom@voyager.org') == 'Tom Paris'
    	assert name_of_email('tom@voyager.org') == 'tom'
    	print('ok')
    	
    if __name__ == '__main__':
    	main()  #Output : ok
    

码字不易,谢谢点赞!!!
码字不易,谢谢点赞!!!
码字不易,谢谢点赞!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值