python中常用的正则表达式及re模块函数的总结

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/rusi__/article/details/98609596

摘要

  • 只有代码片,使用"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。

猜你喜欢

转载自blog.csdn.net/rusi__/article/details/98609596