为什么要做网站首页设计,广州市建设企业网站平台,网页游戏人气排行榜,网络运营商官网一、概述 正则表达式#xff08;regular expression#xff09;又称 规则表达式#xff0c;是一种文本模式#xff08;pattern#xff09;。正则表达式使用一个字符串来描述、匹配具有相同规格的字符串#xff0c;通常被用来检索、替换那些符合某个模式#xff08;规则regular expression又称 规则表达式是一种文本模式pattern。正则表达式使用一个字符串来描述、匹配具有相同规格的字符串通常被用来检索、替换那些符合某个模式规则的文本。正则表达式的核心功能就是处理文本。正则表达式并不仅限于某一种语言但是在每种语言中有细微的差别。
二、re模块 在 Python 中提供了 re 模块来使用正则表达式。每一个字符串都可以视为一个简单的正则表达式。
re.findall(pattern, string, flags0) # 去整个文本中查找所有符合正则表达式的文本
re.search(pattern, string, flags0) # 去整个文本中去匹配返回匹配成功的第一个
re.match(pattern, string, flags0) # 从开始位置开始匹配返回匹配成功的第一个
re.split(pattern, string, maxsplit0, flags0) # 根据正则表达式切割字符串
re.Match.group([group1, ...]) # 返回这个匹配对象或者特定子组
re.Match.groups(defaultNone) # 返回一个唯一或者全部子组的元组在 Python 中主要有两种方法完成模式匹配“搜索”searching即在字符串任意部分中搜索匹配的模式而 “匹配”matching是指判断一个字符串能否从起始处全部或者部分匹配某个模式。搜索通过 search() 函数或方法来实现而匹配是调用 match() 函数或方法实现。 match() 函数试图从字符串的起始部分对模式进行匹配。如果匹配成功就返回一个匹配对象Match 对象如果匹配失败就返回 None匹配对象Match 对象的 group() 方法能够用于显示那个成功的匹配。 search() 的工作方式与 match() 完全一致不同之处在于 search() 会用它的字符串参数在任意位置对给定正则表达式模式搜索第一次出现的匹配情况。如果搜索到成功的匹配就会返回一个匹配对象Match 对象否则返回 None。 由此可见match() 试图从字符串的起始部分开始匹配模式而 search() 函数不但会搜索模式在字符串中第一次出现的位置而且严格地对字符串从左到右搜索。 findall() 查询字符串中某个正则表达式模式全部的非重复出现情况。这与 search() 在执行字符串搜索时类似但与 match() 和 search() 的不同之处在于findall() 总是返回一个列表。如果 findall() 没有找到匹配的部分就返回一个空列表但如果匹配成功列表将包含所有成功的匹配部分从左到有按出现顺序排列。
import recontent 你好啊小樱同学欢迎你加入小樱班。从现在开始你就是我的朋友啊。小樱同志请多多关照。
regex 小樱result re.findall(regex,content)
print(result)result re.search(regex,content)
print(result.group())result re.match(regex,content)
print(result)result re.split(r[。],content)
print(result)三、基础语法
3.1、转义字符 使用正则表达式去检索某些特殊字符的时候需要用到转义字符否则检索不到结果甚至会报错在 Python 中\ 具有转义的意思会对紧随其后的字符进行转义如果我们想使用普通的 \ 需要在使用一个 \ 对它进行转义。
import recontent abc$def(123(456))
regex \(456result re.findall(regex,content)
print(result)result re.match(regex,content)
print(result)需要用到转义符号的常见字符如下. * ( ) $ / \ ? [ ] ^ { } 3.2、字符匹配符
字符匹配符含义实例解释[]可接收的字符列表[abc]a、b、c 中的任意 1 个字符[^]不可接收的字符列表[^abc]除 a、b、c 之外的任意 1 个字符包括数字和特殊符号-连字符a-z任意一个小写字母
import recontent abc123def4567AbCresult re.findall([abc],content)
print(result)result re.findall([^abc],content)
print(result)result re.findall([a-z],content)
print(result)3.3、元字符
元字符含义.匹配单个除换行符以外的任意字符\d匹配 0~9 任意一个数字\D匹配单个任意非数字字符\s匹配任意空白字符\S匹配任意不是空白符的字符\w匹配字母或数字或下划线的任意字符\W匹配任意不是字母、数字、下划线的字符
import recontent abc123def4567AbCresult re.findall(\\d\\d\\d,content)
print(result)result re.findall(r\d\w,content)
print(result)元字符的大写表示不匹配 3.4、重复限定符 重复限定符用于指定其前面的字符和组合项连续出现多少次。
重复限定符意义?0 次 或 1 次*0 次 或 多次1 次 或 多次{n}正好出现 n 次{n,}至少出现 n 次{n,m}出现 n 次 至 m 次
import recontent abc123def4567AbC89d115200a1resutl re.findall(r\d{3,5},content)
print(resutl)result re.findall(r\d,content)
print(result)3.5、定位符 定位符用来指定要匹配的字符串出现的位置。
定位符含义^指定起始字符$指定结束字符\b匹配目标字符串的边界边界指的是字串间有空格或者目标字符串的结束位置\B匹配非单词边界
import recontent abc123 def4567abc123abc abc89 d115200 a1abcresult re.findall(^abc,content)
print(result)result re.findall(abc$,content)
print(result)result re.findall(rabc\b,content)
print(result)result re.findall(ab\B,content)
print(result)3.6、选择匹配符 正则表达式用符号 | 来表示或也叫做分支条件当满足正则表达里的分支条件的任何一种条件时都会当成匹配成功。
import recontent 你好啊小樱同学欢迎你加入小樱班从现在开始你就是我的朋友啊小樱同志请多多关照。
regex 小樱同学|小樱同志result re.findall(regex,content)
print(result)3.7、分组组合 重复限定符是作用在与它相邻的最左边的一个字符。正则表达式中可以使用小括号 () 来做分组也就是括号中的内容会作为一个整体。
3.7.1、捕获分组 我们可以使用 group() 方法匹配对象方法从一个分组中获取匹配的文本。正则表达式字符串中的第一对括号是第 1 组第二对括号是第 2 组依次类推。向 group() 匹配对象方法传入整数就可以取得匹配文本的不同部分。向 group() 传入 0 或者不传入参数将返回这个匹配的文本。 如果想要一次就获取所有的分组我们可以使用 groups() 方法。
捕获分组说明(pattern)非命名捕获。捕获匹配的子字符串。编号为零的第一个捕获是由整个正则表达式模式匹配的文本其它捕获结果则根据左括号的顺序从 1 开始自动编号。(Pnamepattern)命名捕获。将匹配的子字符串捕获到一个组名称或编号名称中。用于 name 的字符串不能包含任何标点符号并且不能以数字开头。可以使用单引号替代尖括号。
import recontent 我是小樱我的身份证明是37028419860401232X
regex r\d{6}(\d{4})(\d{2})(\d{2})\d{3}[\dX]result re.search(regex,content)
year result.group(1)
month result.group(2)
day result.group(3)print(result.group(0))
print(f{year}-{month}-{day})import recontent 我是小樱我的身份证明是37028419860401232X
regex r\d{6}(?Pyear\d{4})(?Pmonth\d{2})(?Pday\d{2})\d{3}[\d|X]result re.search(regex,content)
year result.group(year)
month result.group(month)
day result.group(day)print(result.group(0))
print(f{year}-{month}-{day})3.7.2、非捕获分组
非捕获分组说明(?:pattern)匹配 pattern 但不捕获该匹配的子表达式即它是一个非捕获匹配不存储以后使用的匹配。例如“小樱(?:同学|同志)” 等价于 “小樱同学|小樱同志”(?pattern)它是一个非捕获匹配。例如“Harmony(?2|3)” 匹配 “Harmony2” 中的 “Harmony”但不匹配 “Harmony1” 中的 “Harmony”(?!pattern)该表达式匹配不处于匹配 pattern 的字符串的起始点的搜索字符串。它是一个非捕获匹配。例如“Harmony(?2|3)” 匹配 “Harmony1” 中的 “Harmony”但不匹配 “Harmony2” 中的 “Harmony”
import recontent 你好啊小樱同学欢迎你加入小樱班从现在开始你就是我的朋友啊小樱同志请多多关照。regex 小樱(?:同学|同志)
result re.findall(regex,content)
print(result)regex 小樱(?同学|同志)
result re.findall(regex,content)
print(result)regex 小樱(?!同学|同志)
result re.findall(regex,content)
print(result)3.8、非贪婪匹配 当 ? 元字符紧随任何其它限定符 *、、?、{n}、{n,}、{n,m}之后匹配模式是 “非贪婪匹配”。非贪婪匹配搜索到、尽可能短的字符串。而默认的贪婪匹配搜索到的尽可能长的字符串。
import recontent abc111111abc# 贪婪匹配
result re.findall(r\d{3,5},content)
print(result)# 非贪婪匹配
result re.findall(r\d{3,5}?,content)
print(result)