11. python正则表达式
发布日期:2021-05-17 07:48:57 浏览次数:24 分类:精选文章

本文共 2956 字,大约阅读时间需要 9 分钟。

正则表达式语法

1.1 普通字符

  • []:表示一个字符组,代表匹配一位字符。
  • [0-9]:匹配0-9的数字字符。
  • [a-zA-Z]:匹配英文字母。
  • [0-9][0-9]:匹配长度为2的数字字符串。
  • [Yy]es:匹配Yesyes

1.2 字符转义

  • 对于-[]等元字符,需要在正则表达式中进行转义。
  • [0\-9]:匹配0、-、9三个字符。

1.3 元字符

  • \:转义。
  • ^:匹配输入的开头部分。
  • $:匹配输入的结尾部分。
  • *:表示0次或多次匹配。
  • +:表示1次或多次匹配。
  • ?:表示0次或1次匹配。
  • .:匹配任意单个字符(不包括换行符)。
  • (pattern):匹配模式并记住匹配项。
  • |:表示或。
  • {n}:精确匹配n次。
  • {n,}:表示至少匹配n次。
  • [abc]:匹配字符集abc。
  • [^abc]:匹配不在字符集abc中的字符。
  • [a-z]:匹配字符范围a到z。
  • [^a-z]:匹配不在字符范围a到z中的字符。
  • \A:匹配字符串的开头。
  • \b:匹配单词边界。
  • \B:匹配非单词边界。
  • \d:匹配数字字符。
  • \D:匹配非数字字符。
  • \f:匹配换页符。
  • \n:匹配换行符。
  • \r:匹配回车符。
  • \s:匹配任意空白字符。
  • \S:匹配任意非空白字符。
  • \t:匹配制表符。
  • \v:匹配垂直制表符。
  • \w:匹配任何单词字符(包括下划线)。
  • \W:匹配任何非单词字符。
  • \z:匹配字符串的结尾。
  • \Z:匹配字符串结尾或结尾之前的换行符。

1.4 贪婪与非贪婪模式

  • 贪婪模式:限定符尽可能多地匹配字符串。
  • 非贪婪模式:限定符尽可能少地匹配字符串,限定符后加?表示非贪婪模式。

1.5 零宽断言

  • (?=...):断言自身出现的位置后面可以匹配后面的表达式。
  • (?<=...):断言自身出现的位置前面可以匹配后面的表达式。
  • (?!):断言自身出现的位置后面不可以匹配后面的表达式。
  • (?<!...):断言自身出现的位置前面不可以匹配后面的表达式。

re模块

2.1 re模式介绍

  • re模块中strbytes不能混合使用。
  • 由于正则表达式中的\和Python中的\存在冲突,定义正则表达式时可以在字符串前面添加r前缀。

2.2 compile函数

  • compile函数用于编译正则表达式,生成一个Pattern对象。
  • 示例:
    import re
    pattern = re.compile(r'\w+')

2.3 match函数

  • match方法用于查找字符串指定位置的正则匹配,仅匹配一次。
  • 示例:
    pattern = re.compile(r'\d+')
    m1 = pattern.match('one123') # 匹配位置从3-5,包含头不包含尾
    m2 = pattern.match('one123', 3, 5) # 匹配位置从3-5
    m3 = re.match(r'\d+','one123') # 不使用忽略大小写模式
    m4 = re.match(r'[a-z]+','Abcde', re.I) # 使用忽略大小写模式

2.4 search函数

  • search方法用于查找字符串中指定位置的正则匹配,仅匹配一次。
  • 示例:
    pattern = re.compile(r'\d+')
    m1 = pattern.search('one123') # 匹配位置从3-5,包含头不包含尾
    m2 = pattern.search('one123', 3, 5) # 匹配位置从3-5
    m3 = re.search(r'\d+','one123') # 不使用忽略大小写模式
    m4 = re.search(r'[a-z]+','Abcde', re.I) # 使用忽略大小写模式

2.5 findall函数

  • findall函数用于查找所有匹配项。
  • 示例:
    pattern = re.compile(r"\d{2}")
    m1 = pattern.findall("one1234") # 返回匹配结果列表
    m2 = pattern.findall("one1234", 0, 4) # 返回匹配结果列表
    m3 = re.findall(r"\d+","one1234") # 返回匹配结果列表
    m4 = re.findall(r"[a-z]","123Abcd", re.I) # 返回匹配结果列表

2.6 split函数

  • split函数用于将字符串按正则表达式分割。
  • 示例:
    pattern = re.compile(r"[\s\,\;]+")
    m1 = pattern.split("a,b;;c d") # 分割结果
    m2 = re.split(r"[\s\,\;]+","a,b;;c d") # 自动分割

2.7 sub函数

  • sub函数用于使用正则表达式替换字符串。
  • 示例:
    s = "hello 123 world 456"
    pattern = re.compile(r"(\w+)(\w+)")
    m1 = pattern.sub("hello world", s) # 替换一次
    m2 = pattern.sub("hello world", s, 1) # 替换一次
    m3 = re.sub(r"(\w+)(\w+)","hello world", s, 1) # 替换一次

re模块的分组匹配

  • 分组是通过()扩起来的正则表达式,匹配出的内容表示一个分组。
  • 分组后,通过group(n)groups()即可获取某个分组的内容。
  • 示例:
    pattern = re.compile("\d-\d-\d")
    m1 = pattern.match("1-2-3") # 不分组
    m2 = pattern.compile("(\d)-(\d)-(\d)") # 分组

常见正则表达式

6.1 邮箱地址

  • ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

6.2 URL

  • ^(https?:W)?([\da-z.-]+)\.([a-z.]{2,6})([V\w.-])V?$

6.3 匹配首尾空白字符的正则表达式

  • ^\s|\s$

6.4 手机号码

  • ^(13[0-9]|14[0-9]|15[0-9]|166|17[0-9]|18[0-9]|19[8|9])\d{8}$

6.5 电话号码

  • ^(\d{3,4}-)?\d{7,8}$

6.6 18位身份证号码

  • ^((\d{18}|([0-9x]{18})|(0-9X){18}))$

6.7 账号是否合法

  • ^[a-zA-Z][a-zA-Z0-9_]{4,15}$

6.8 一年的月份

  • ^(0?[1-9]|1[0-2])$

6.9 日期格式

  • ^\d{4}-\d{1,2}-\d{1,2}$

6.10 一个月的天数

  • ^((0?[1-9])|((1|2)[0-9])|30|31)$

6.11 IP地址

  • ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$
上一篇:12 python邮件处理
下一篇:0. python安装

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年05月08日 12时13分46秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章