正则表达式

正则表达式

re模块的使用

  • re正则表达式模块

    • match(正则表达式,待匹配字符串),

      • 用于正则匹配检查,如果待匹配字符串能够匹配正则表达式,则match方法返回匹配对象,否则返回None

      • 采用从左往右逐项匹配

    • group()方法

      • 用来返回字符串的匹配部分

字符匹配、数量表示、边界表示

字符匹配

  • . ,匹配除“\n”之外的任意单个字符

  • \d,匹配0到9之间的一个数字,等价于[0-9]

  • \D,匹配一个非数字字符,等价于[~0-9]

  • \s,匹配任意空白字符

  • \w,匹配任意单词字符(包含下划线),如a-z,A-z,0-9,_

  • \W,匹配任意非单词字符,等价于^[a-z,A-z,0-9,_]

  • [],匹配[]中列举的字符

  • ^,取反

"."匹配除了“\n”之外的任意单个字符

"\s"匹配空格字符

"\S"匹配非空格字符

"\w"匹配单词字符

"[]"匹配日中括号列举的字符

数量表示

  • *,一个字符可以出现任意次,也可以一次都不出现

  • +,一个字符至少出现一次

  • ?,一个字符至多出现一次

  • {m},一个字符出现m次

  • {m,},一个字符至少出现m次

  • {m, n},一个字符出现m到n次

“*“表示出现任意次

"+"一个字符至少出现1次

"?"一个字符至多出现1次

自定义匹配字符出现的次数

注意:从字符串的第一个字符进行匹配,这是match函数的特点

练习:匹配一个手机号

分析过程:

手机号11位,第一位以1开头,第二位3/5/7/8,第三位到第十一位是0-9数字

后面我们学到“边界”,才能识别11位。

边界表示

  • 字符串与单词边界

    • ^,用于匹配一个字符串的开头

    • $,用于匹配一个字符串的结尾

      只是用于匹配是否结束,而不是匹配结束的那个字符。

  • 匹配分组

    • |,表示或,匹配|连接的任何一个表达式

    • (),将括号中字符作为一个分组

    • \NUM,配合分组()使用,引用分组NUM(NUM表示分组的编号)对应的匹配规则

    • (?P),给分组起别名

    • (?P=name),应用指定别名的分组匹配到的字符串

转义字符

正则表达式里的字符

字符串的边界

使用结束边界"$"完善手机号匹配

匹配邮箱

匹配分组

匹配0-100的数字

正则表达式中使用括号()来分组

\NUM 使用第NUM个分组

正则表达式的高级用法

  • search

    • 从左到右在字符串的任意位置搜索第一次出现匹配给定正则表达式的字符

  • findall

    • 在字符串中查找所有匹配成功的组,返回匹配成功的结果列表

  • finditer

    • 在字符串中查找所欲正则表达式匹配成功的字符串,返回iterator迭代器

  • sub

    • 将匹配到的数据使用新的数据替换

  • split

    • 根据指定的分隔符切割字符串,返回切割之后的列表

贪婪与非贪婪模式

  • 贪婪模式

    • 正则表达式引擎默认是贪婪模式,尽可能多的匹配字符

  • 非贪婪模式

    • 与贪婪模式相反,尽可能少的匹配字符

    • 在表示数量的”*“,”?“,”+“,“{m,n}”符号后面加上?,使贪婪变成非贪婪。

Last updated

Was this helpful?