微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

归纳整理python正则表达式解析

本篇文章给大家带来了关于python的相关知识,其中主要介绍了Python正则表达式的相关问题,总结了包括正则表达式函数、元字符、特殊序列、集合套装、匹配对象等等,希望对大家有帮助。

推荐学习:python教程

正则表达式的作用是什么?我们网页抓取到的内容很多,我们不可能全部都获取,只需要其中的一部分内容,因此我们需要使用正则来匹配我们想要的内容

正则表达式模块

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

import re

Python中的正则表达式

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

import re

txt = The rain in Spainx = 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 = 菜鸟 学 pythonx = 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 Spainx = re.findall([arn], txt)print(x)if x:
  print(匹配到了!)else:
  print(匹配不到)

匹配任意范围内小写字母

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

import re

txt = hello wo r l dx = 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 worldx = re.search(wo, txt)print(x)

运行:

在这里插入图片描述

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

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

span函数

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

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

运行:

在这里插入图片描述

string函数

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

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

group函数

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

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

运行:

在这里插入图片描述


注意:如果没有匹配,None将返回值,而不是匹配对象。

推荐学习:python教程

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐