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


    笔记:

    • 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                                         说明匹配失败
      
      • 1
      • 2
      • 3
      • 4
      • 5

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

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

      ‘^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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
  • 相关阅读:
    【计算机网络】MTU和MSS
    32.同步FIFO-IP核的调用
    聊聊接口性能优化的11个小技巧
    AAAI 2022 | 量化交易相关论文(附论文链接)
    爬虫一般采用什么代理IP,Python爬虫代理IP使用方法详解
    0基础小白想学习软件测试,应该如何选择培训机构呢
    一篇文章教会你利用红黑树实现map和set的封装
    如何在Jupyter Lab中安装不同的Kernel
    Verasity Tokenomics — 社区讨论总结与下一步计划
    java计算机毕业设计农村养老保险信息管理系统源码+系统+mysql数据库+lw文档
  • 原文地址:https://blog.csdn.net/qq_40967086/article/details/125456867