正则表达式的学习

Posted 正哥哥的自习室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式的学习相关的知识,希望对你有一定的参考价值。

这是第三天的学习了,希望自己能坚持下去。今天学习了正则表达式。正则表达式是用于匹配尤其是字符匹配的十分有用的工具,用来检测用户名是否达标之类的非常实用。

学习内容

  • 正则表达式

  • 习题练习

匹配

  • \d匹配数字

  • \w匹配数字或字符

  • .可以匹配任意字符

  • *表示可以匹配任意数目字符,也包括0个

  • +表示至少一个字符

  • ?表示0个或1个字符

  • {n}表示n个字符

  • {n,m}表示n-m个字符

  • 要做更精确地匹配,可以用 []表示范围,例如: [a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量

  • A|B可以匹配A或B

  • ^表示行的开头, $表示行的结束

  • 我们可以将 ' '内的内容理解成"与"的关系,将 [ ]中的内容理解成"或"的关系



re模块

 
   
   
 
  1. import re

  2. def is_valid_email(addr):

  3.    if re.match(r'^[a-zA-Z0-9.]+@[a-zA-Z0-9]+.[a-zA-Z]{3}',addr):

  4.        return True

  5. #Test

  6. assert is_valid_email('someone@gmail.com')

  7. assert is_valid_email('bill.gates@microsoft.com')

  8. assert not is_valid_email('bob#example.com')

  9. assert not is_valid_email('mr-bob@example.com')

  10. print('ok')

  11. #Result

  12. ok

  • re.match如果不匹配则返回 None,匹配则返回 match对象

 
   
   
 
  1. import re

  2. def name_of_email(addr):

  3.    res= re.match(r'^<?(\w+\s?\w*)>?\s?\w*@\w+.\w{3}$',addr)

  4.    if res:

  5.        print(res.group(1))

  6.        return res.group(1)

  7.    else:

  8.        return None









    #Test

  1. assert name_of_email('<Tom Paris> tom@voyager.org') == 'Tom Paris'

  2. assert name_of_email('tom@voyager.org') == 'tom'

  3. print('ok')

  4. #Result

  5. ok

  • ()内可以表示一组,然后再用 res.group打出,注意的是 res.group(0)永远是本身

为什么说第二个问题有一点点难度呢,在我刚看到这道题的时候有点懵,在思考 <>这样一种结构应该怎么去表达,但其实是没有必要的,只需要把这些东西看成是不同的字符(也确实只是不同的字符)不需要的使用 ?或者 *,他们都可以只存在0个,然后每一个字符或者数字一个一个来匹配,这样一来就简单了。

后话

正则表达式是一个极其强大的工具,因此我用这一天的时间是绝对学不精的,关于 re.split()以及贪婪匹配的内容依旧参考原文链接廖雪峰大佬的文章。


以上是关于正则表达式的学习的主要内容,如果未能解决你的问题,请参考以下文章

python基础学习(十三)

python基础学习笔记(十三)

text 正则表达式片段

markdown 正则表达式模式片段

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性

循环通过 python 正则表达式匹配