python中常用的正则表达式及re模块函数的总结
程序员文章站
2024-03-26 11:02:53
...
摘要
- 只有代码片,使用"todo"作为分割表示(需要粘贴到pycharm上便更好的查阅)
- 关于函数部分,只说明有何作用,并未举例。
- 仅为个人总结,通俗但是可能存在不妥之处
- 文章本意:回顾知识,方便查阅。
正文(代码)
# todo 首先明白
# ^ 表示从哪开始; ^在 [] 里面表示否定。
# todo 匹配单个字符
# \d 0~9
# [1-8] 等于 [12345678] [1-36-8] --> [123678] [1-8a-cA-C] -->[12345678abcABC] 中括号里面的表示范围
# \w 范围很广 英文 数字 中文 _ 都可以匹配(这是因为它是utf-8编码)但是!?等不行,所以它也只是范围比较广罢了。
# \s 空白字符 比如:空格键。tab键
# . 基本上可以理解为linux的 * 这是是任意的一个字符,匹配不了换行(\n)。
# PS: 所有的\大写字母都是它们的补集
# $ 以谁结尾
# ? 代表存在 0或者1个。
# todo 匹配多个字符
# \d{1,3} 一位数,两位数,三位数都可以。 \d{11}--->11位数字(此种是满足{}前面的数据的。比如:A{1,3}便只有A AA AAA 满足)
# ?前面的那一个可有可无
# .* .匹配任意单个字符,唯独匹配不了换行(\n), * 配皮任意个数,空的也行(+和*的区别便是空的不行)。————————》可以在re.match()的参数中添加一个re.S便可使.匹配的了\n了。
# todo 特别一点的
# | 相当于 or 但是你用的时候需要括号阔起来 例如:(163|126)代表163和126都可以正确匹配。------>group(参数)可以取出括号中匹配的东西(类似索引)--->这便是分组
# 分组也是可以直接运用到正则表达式里的。例如:r"<(\w*)>.*</\1>" 中的\1是必须要和(\w*)中的数据是一样的---->这里的1还是类似于索引的
# 如果觉得索引可能会分不清的话,那么也是可以给分组起名的。例如 r"(?P<name>\w*).*</(?P=name)>" ----->P是大写的
# todo re中的其它模块
# match() 用的最多的。是从头开始按照正则开始匹配。
# search().group()是不用从头开始匹配的。 只会匹配第一个数据,然后就会返回。 比如 \d+ 匹配"sada888dsad999" 只会返回888.----->如果想要达到match()的作用的话 加一个 ^ 即可
# findall() 不需要用group()了,会以列表的形式返回所有的匹配的数据。
# sub(r"\d+","998","python = 997, c++ = 1024") 它也不需要用group,是先匹配正则,然后将匹配的数据替换了,再返回。----->只要匹配的地方,全部都替换。
# 另外,它还支持函数的调用 "998"可以是一个函数的引用,当成功匹配的时候,需要替换的字符串会调用这个函数并接收它的返回值。
# split可以切割字符串,不需要调用group()。例:split(r":| ","info:xiaozhang 33 shanghai") 会返回 ["info","xiaozhang","33","shanghai"].
# todo 正则的贪婪:
# 贪婪模式就是“.+”中的+会一直查找到最后一个符合条件的字符。
# 非贪婪模式就是在“.+?",会匹配到第一个符合条件的字符就停止。
# 举例:前者会匹配到 234 的 4;后者会匹配到2。
下一篇: python os模块及open函数用法