【全网最全】python正则表达式大全,所有讲解都在这,包教包会,学不会找我!

川川菜鸟 2021-10-27 14:16:14
Python 正则表达式 正则 全网 最全

前言

本篇内容,我是在基础专栏讲过的,为什么在这个专栏拿出来?说明我们爬虫要用到正则。如果你看不懂本专栏的内容,你需要看我基础专栏好好学一下:python全栈基础专栏
正则表达式的作用是什么?我们网页抓取到的内容很多,我们不可能全部都获取,只需要其中的一部分内容,因此我们需要使用正则来匹配我们想要的内容。

正则表达式模块

Python 有一个名为 的内置包re,可用于处理正则表达式。导入re模块:

import re

Python中的正则表达式

导入re模块后,您可以开始使用正则表达式。
例如:搜索字符串以查看它是否以“The”开头并以“Spain”结尾:

import re
txt = "The rain in Spain"
x = re.search("^The.*Spain$", txt)
if x:
print("匹配成功!")
else:
print("匹配失败")

运行:
在这里插入图片描述
当然,你现在看不懂这个例子,既然手把手教学,并不会教大家一步登天。

正则表达式函数

findall() 函数

该findall()函数返回一个包含所有匹配项的列表。
例如:打印所有匹配项的列表

import re
txt = "川川菜鸟啊菜鸟啊"
x = re.findall("菜鸟", txt)
print(x)

运行返回:
在这里插入图片描述
该列表按找到的顺序包含匹配项。如果未找到匹配项,则返回一个空列表:

import re
txt = "菜鸟并不菜"
x = re.findall("川川", txt)
print(x)
if (x):
print("匹配成功了哟")
else:
print("找不到这个呀!")

运行返回:
在这里插入图片描述

search() 函数

该search()函数在字符串中搜索匹配项,如果有匹配项,则返回一个Match 对象。如果有多个匹配项,则只返回匹配项的第一次出现。
例如:搜索字符串中的第一个空白字符:

import re
txt = "菜鸟 呢"
x = re.search("\s", txt)
print("第一个空格字符位于位置:", x.start())

运行结果:
在这里插入图片描述
如果未找到匹配项,None则返回该值:

import re
txt = "天上飞的是菜鸟"
x = re.search("川川", txt)
print(x)

返回:
在这里插入图片描述

split() 函数

该split()函数返回一个列表,其中的字符串在每次匹配时被拆分。
例如:在每个空白字符处拆分

import re
txt = "菜鸟 学 python"
x = re.split("\s", txt)
print(x)

运行返回:
在这里插入图片描述
您可以通过指定maxsplit 参数来控制出现次数
例如:仅在第一次出现时拆分字符串:

import re
#Split the string at the first white-space character:
txt = "飞起来 菜鸟 们"
x = re.split("\s", txt, 1)
print(x)

返回:
在这里插入图片描述

sub() 函数

该sub()函数用您选择的文本替换匹配项。
例如:用只替换就

import re
txt = "学python就找川川菜鸟"
x = re.sub("就", "只", txt)
print(x)

运行:
在这里插入图片描述
您可以通过指定count 参数来控制替换次数 :
例如替换前 2 次出现:

import re
txt = "学python就就就川川菜鸟"
x = re.sub("就", "只", txt,2)
print(x)

返回:
在这里插入图片描述

元字符

列表符号

[] 用于一组字符
例如:#按字母顺序查找“a”和“m”之间的所有小写字符

import re
txt = "apple chuanchuan "
#按字母顺序查找“a”和“m”之间的所有小写字符
x = re.findall("[a-m]", txt)
print(x)

运行:
在这里插入图片描述

转义符

** 表示特殊序列(也可用于转义特殊字符)
例如匹配所有数字:

import re
txt = "我今年20岁了"
#查找所有数字字符
x = re.findall("\d", txt)
print(x)

运行返回:
在这里插入图片描述

任意符号

. 可以任何字符(换行符除外)。
例如:搜索以“he”开头、后跟两个(任意)字符和一个“o”的序列

import re
txt = "hello world"
#搜索以“he”开头、后跟两个(任意)字符和一个“o”的序列
x = re.findall("he..o", txt)
print(x)

运行返回:
在这里插入图片描述

开始符

^符号用于匹配开始。

import re
txt = "川川菜鸟 飞起来了"
x = re.findall("^川", txt)
if x:
print("哇,我匹配到了")
else:
print("哎呀,匹配不了啊")

运行:
在这里插入图片描述

结束符

$ 符号用于匹配结尾,例如:匹配字符串是否以“world”结尾

import re
txt = "hello world"
#匹配字符串是否以“world”结尾
x = re.findall("world$", txt)
if x:
print("匹配成功了耶")
else:
print("匹配不到哦")

运行:
在这里插入图片描述

星号符

  • 星号符用于匹配零次或者多次出现。
import re
txt = "天上飞的是菜鸟,学python找川川菜鸟!"
#检查字符串是否包含“ai”后跟 0 个或多个“x”字符:
x = re.findall("菜鸟*", txt)
print(x)
if x:
print("匹配到了!")
else:
print("气死了,匹配不到啊")

运行:
在这里插入图片描述

加号符

+ 用于匹配一次或者多次出现
例如:检查字符串是否包含“菜鸟”后跟 1 个或多个“菜鸟”字符:

import re
txt = "飞起来了,菜鸟们!"
#检查字符串是否包含“菜鸟”后跟 1 个或多个“菜鸟”字符:
x = re.findall("菜鸟+", txt)
print(x)
if x:
print("匹配到了!")
else:
print("烦死了,匹配不到")

运行:
在这里插入图片描述

集合符号

{} 恰好指定的出现次数
例如:检查字符串是否包含“川”两个

import re
txt = "川川菜鸟并不菜!"
#检查字符串是否包含“川”两个
x = re.findall("川{2}", txt)
print(x)
if x:
print("匹配到了两次的川")
else:
print("匹配不到啊,帅哥")

返回:
在这里插入图片描述

或符

| 匹配两者任一
例如:匹配字符串菜鸟或者是我了

import re
txt = "菜鸟们学会python了吗?串串也是菜鸟啊!"
x = re.findall("菜鸟|是我了", txt)
print(x)
if x:
print("匹配到了哦!")
else:
print("匹配失败")

运行:
在这里插入图片描述

特殊序列

指定字符

\A : 如果指定的字符位于字符串的开头,则返回匹配项。
例如:匹配以菜字符开头的字符

import re
txt = "菜鸟在这里"
x = re.findall("\A菜", txt)
print(x)
if x:
print("是的匹配到了")
else:
print("匹配不到")

运行:
在这里插入图片描述

指定开头结尾

\b 返回指定字符位于单词开头或结尾的匹配项 (开头的“r”确保字符串被视为原始字符串)。
例如:匹配爱开头

import re
txt = "爱你,川川"
x = re.findall(r"\b爱", txt)
print(x)
if x:
print("匹配到了")
else:
print("匹配不到")

运行:
在这里插入图片描述
又例如:匹配川结尾

import re
txt = "爱你,川川"
x = re.findall(r"川\b", txt)
print(x)
if x:
print("匹配到了")
else:
print("匹配不到")

运行:
在这里插入图片描述

匹配中间字符

\B 返回存在指定字符但不在单词开头(或结尾)的匹配项 (开头的“r”确保字符串被视为“原始字符串”)
比如我匹配菜鸟:

import re
txt = "我是菜鸟我是菜鸟啊"
#检查是否存在“ain”,但不是在单词的开头:
x = re.findall(r"\菜鸟", txt)
print(x)
if x:
print("匹配到了嘛!!")
else:
print("匹配不到哇!")

运行:
在这里插入图片描述
但是你匹配结尾就会返回空,比如我匹配鸟:

import re
txt = "川川菜鸟"
#检查是否存在“鸟”,但不是在单词的末尾:
x = re.findall(r"鸟\B", txt)
print(x)
if x:
print("匹配到了哦")
else:
print("找不到")

运行:
在这里插入图片描述

匹配数字

\d 返回字符串包含数字(0-9 之间的数字)的匹配项。
例如:

import re
txt = "我今年20岁了啊"
#检查字符串是否包含任何位数(0-9的数字)
x = re.findall("\d", txt)
print(x)
if x:
print("哇哇哇,匹配到数字了")
else:
print("找不到哦")

运行:
在这里插入图片描述

匹配非数字

\D 返回字符串不包含数字的匹配项
例如:

import re
txt = "我今年20岁"
#匹配任何非数字符号
x = re.findall("\D", txt)
print(x)
if x:
print("匹配到了,开心!")
else:
print("匹配不到,生气")

运行:
在这里插入图片描述

空格匹配

\s 返回一个匹配字符串包含空白空间字符的匹配项。
例如:

import re
txt = "我 是 川 川 菜 鸟"
#匹配任何空格字符
x = re.findall("\s", txt)
print(x)
if x:
print("匹配到了")
else:
print("匹配不到啊")

运行:
在这里插入图片描述

匹配非空格

\S 返回字符串不包含空格字符的匹配项

import re
txt = "菜鸟是 我 了"
#匹配任意非空字符
x = re.findall("\S", txt)
print(x)
if x:
print("匹配到了!")
else:
print("匹配不到啊")

运行:
在这里插入图片描述

匹配任意数字和字母

返回一个匹配,其中字符串包含任何单词字符(从 a 到 Z 的字符,从 0 到 9 的数字,以及下划线 _ 字符)
例如:

import re
txt = "菜鸟啊 是串串呀"
#在每个单词字符(从a到z的字符,0-9的数字)返回匹配项,以及下划线_字符):
x = re.findall("\w", txt)
print(x)
if x:
print("匹配到了啊")
else:
print("匹配不到哇")

运行:
在这里插入图片描述

匹配任意非数字和字母

返回字符串不包含任何单词字符的匹配项,在每个非单词字符中返回匹配(不在A和Z之间的字符。“!”,“?”空白位等)
例如:

import re
txt = "菜鸟 是 我嘛?我不信!!"
#在每个非单词字符中返回匹配(不在A和Z之间的字符。“!”,“?”空白位等):
x = re.findall("\W", txt)
print(x)
if x:
print("匹配到了!")
else:
print("匹配不到啊")

运行:
在这里插入图片描述

匹配结尾

\Z 如果指定的字符位于字符串的末尾,则返回匹配项。
例如:

import re
txt = "川川是菜鸟啊"
x = re.findall("啊\Z", txt)
print(x)
if x:
print("匹配到了哦!")
else:
print("匹配不到")

集合套装

指定符范围匹配

例如集合:[arn]

import re
txt = "The rain in Spain"
x = re.findall("[arn]", txt)
print(x)
if x:
print("匹配到了!")
else:
print("匹配不到")

匹配任意范围内小写字母

返回任何小写字符的匹配项,按字母顺序在 a 和 n 之间。
例如:

import re
txt = "hello wo r l d"
x = re.findall("[a-n]", txt)
print(x)
if x:
print("匹配到了!")
else:
print("匹配不到")

运行:
在这里插入图片描述
同样的道理,依次其它情况如下:

[^arn] 返回除 a、r 和 n 之外的任何字符的匹配项

[0123] 返回存在任何指定数字(0、1、2 或 3)的匹配项

[0-9] 返回 0 到 9 之间任意数字的匹配项

[0-5][0-9] 返回 00 到 59 中任意两位数的匹配项

[a-zA-Z] 按字母顺序返回 a 和 z 之间的任何字符的匹配,小写或大写

[+] 在集合中,+, *, ., |, (), $,{} 没有特殊含义,所以 [+] 的意思是:返回字符串中任意 + 字符的匹配项。这个我i举个例子:

import re
txt = "5+6=11"
#检查字符串是否有任何 + 字符:
x = re.findall("[+]", txt)
print(x)
if x:
print("匹配到了")
else:
print("匹配不到")

运行:
在这里插入图片描述

匹配对象

匹配对象是包含有关搜索和结果的信息的对象。注意:如果没有匹配,None将返回值,而不是匹配对象。
直接举个例子:
执行将返回匹配对象的搜索

import re
#search() 函数返回一个 Match 对象:
txt = "hello world"
x = re.search("wo", txt)
print(x)

运行:
在这里插入图片描述

Match 对象具有用于检索有关搜索和结果的信息的属性和方法:

span()返回一个包含匹配开始和结束位置的元组。
string返回传递给函数的字符串
group()返回字符串中匹配的部分

span函数

例如:打印第一个匹配项的位置(开始和结束位置)。正则表达式查找任何以大写“S”开头的单词:

import re
#搜索单词开头的大写“S”字符,并打印其位置
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.span())

运行:
在这里插入图片描述

string函数

例如:打印传递给函数的字符串

import re
#返回字符串
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.string)

group函数

例如:打印字符串中匹配的部分。正则表达式查找任何以大写“S”开头的单词

import re
#搜索单词开头的大写“w”字符,并打印该单词:
txt = "hello world"
x = re.search(r"\bw\w+", txt)
print(x.group())

运行:
在这里插入图片描述
注意:如果没有匹配,None将返回值,而不是匹配对象。

版权声明
本文为[川川菜鸟]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_46211269/article/details/120979560

  1. python将字符串转成特定列表格式
  2. Python做一个保护手机号编程
  3. 用Spyder运行Python爬虫时仅输出“runfile(xx), wdir=xx”
  4. 使用Python对一组数据进行分段拟合,如何处理断点处的左右倒数相等
  5. Python输出符合条件的文件的路径名
  6. Python中pandas怎么实现分组去重统计和求和
  7. python xpath 爬虫,请帮帮我吧!
  8. python 用泰勒公式近似计算sinx的值 求解代码中哪里出现了错误
  9. Python语法2
  10. python如何将输出的各行数字对齐
  11. 使用 Python 进行数据可视化之Matplotlib
  12. python新鲜题 老公们 救救孩子
  13. 如何用python解答 要如何着手
  14. 请问Python正则表达式如何在多个文本中匹配出关键字
  15. Python 三天打鱼两天晒网问题
  16. mac安装python3
  17. 請問python要怎麼印数字倒等腰三角形
  18. 【算法学习】807. 保持城市天际线(java / c / c++ / python / go / rust)
  19. 【算法学习】237. 删除链表中的节点(java / c / c++ / python / go)
  20. 【算法学习】1512. 好数对的数目(java / c / c++ / python / go / rust)
  21. 【算法学习】1672. 最富有客户的资产总量(java / c / c++ / python / go / rust)
  22. 【算法学习】771. 宝石与石头(java / c / c++ / python / go / rust)
  23. 【算法学习】02.03. 删除中间节点(java / c / c++ / python / go)
  24. 【算法学习】1769. 移动所有球到每个盒子所需的最小操作数(java / c / c++ / python / go / rust)
  25. 【算法学习】1486. 数组异或操作(java / c / c++ / python / go / rust)
  26. 【算法学习】剑指 Offer 64. 求1+2+…+n(java / c / c++ / python / go / rust)
  27. 【算法学习】LCP 44. 开幕式焰火(java / c / c++ / python / go / rust)
  28. 【算法学习】剑指 Offer 58 - II. 左旋转字符串(java / c / c++ / python / go / rust)
  29. python的学校疑问难题求解
  30. 大学python题 作业题 基础题
  31. Python字典的知识,输出的样例为,最高分:89
  32. python写入文件失败且程序提前中止
  33. 用Python写一个学生字典,帮帮忙
  34. Python,能不能帮帮忙,真的不会
  35. [python] yield 和 readline() 的使用问题
  36. python安装找不到问题救救孩子
  37. python中循环结构完成数字游戏
  38. 如何用python实现多列vlookup(excle操作)
  39. python语言deLong‘s test:通过统计学的角度来比较两个ROC曲线、检验两个ROC曲线的差异是否具有统计显著性
  40. LPC55S69 MicroPython模组和库函数
  41. LPC55S69 IoT Kit专属 Micropython模组和库函数简介
  42. 安装LPC55S69 MicroPython模块是遇到的CDC Interface驱动问题
  43. 使用soundcard在Python中操作声卡
  44. 自动化快速上手--Python(7)--【字典】--每天半小时
  45. Python之循环结构【包括列表、for语句、range()函数、while语句、循环嵌套、break、continue、算法优化等】
  46. Python模块安装与异常处理详解(numpy、pygame、matplotlib等)
  47. Python__init__.py作用
  48. python 爬取网页时出现多种错误
  49. Python中关于大量绘制速度曲线的问题
  50. python-async的安装和使用方法
  51. Matlab的fread(fild,1,int32)迁移到python变成什么
  52. 想用python开发一个音频过滤器,请指导?
  53. python使用openpyxl读取Excel文件显示No such file or directory
  54. xmoji虚拟头像交互如何使用python(像深度学习)制作?
  55. python 打开页面页面的链接,为什么总是报错呀?
  56. Python中DataLoader的batch_size、shuffle的疑惑。
  57. python安装pymssql库,可以import,但无法调用函数
  58. 【Python学习教程】常用的8个Python数据可视化库!
  59. python处理csv中的时间
  60. 数据结构,元音统计(Python)