正则表达式 小甲鱼
正则表达式使用方法

正则表达式使用方法
正则表达式是一种用于匹配字符串模式的工具,可以用于文本搜索和替换、数据验证等多种场景。
在实际使用中,我们需要掌握一些基本的正则表达式语法,以及一些常用的表达式组合,才能更加高效地处理字符串。
下面介绍一些常见的正则表达式用法:
1. 匹配单个字符
- .:匹配任意一个字符(除换行符以外)
- []:匹配方括号内的任意一个字符
- [^]:匹配不在方括号内的任意一个字符
- d:匹配数字字符
- w:匹配字母、数字、下划线字符
- s:匹配空格、制表符、换行符等空白字符
2. 匹配重复字符
- *:匹配前面的字符重复0次或多次
- +:匹配前面的字符重复1次或多次
- ?:匹配前面的字符重复0次或1次
- {n}:匹配前面的字符重复n次
- {n,m}:匹配前面的字符重复n到m次
- {n,}:匹配前面的字符重复n次或更多次
3. 匹配位置
- ^:匹配字符串开头
- $:匹配字符串结尾
- b:匹配单词边界(字母、数字、下划线等字符与非单词字符之间的位置)
- B:匹配非单词边界
4. 匹配分组
- ():将表达式分组,可以在后面应用重复、替换等操作
- ?: 在分组中加入?,表示该分组不捕获匹配结果,只用于重复、替换等操作
5. 其他用法
- |:表示或,匹配两个表达式中的任意一个
- :转义符,用于匹配特殊字符(如.、*、?等)
- ()和$1:在替换操作中,用$1、$2等表示正则表达式中的分组结果,可以对匹配结果进行变换
总的来说,正则表达式是一种强大的文本处理工具,可以大大提高我们的工作效率。
当然,要想熟练掌握正则表达式,还需要不断练习,积累经验。
正则表达式例子详解

正则表达式(Regular Expression)是一种强大的文本处理工具,它使用特定的模式来匹配字符串中的文本。
下面是一些正则表达式的例子,并对其进行了详细解释:基础匹配表达式:a解释:这个正则表达式会匹配任何包含字母“a”的字符串。
字符类表达式:[abc]解释:这个正则表达式会匹配任何单个字母“a”、“b”或“c”。
选择、分组和引用表达式:(ab|cd)解释:这个正则表达式会匹配字符串“ab”或“cd”。
括号表示分组,|表示“或”,所以这个正则表达式可以匹配“ab”或“cd”。
预查表达式:(?=abc)解释:这个正则表达式会匹配任何前面是“abc”的字符串。
但请注意,它只是预查,并不会消耗字符,也就是说,它只是检查前面的字符串是否符合后面的模式,但不会移动指针。
后查表达式:(?<=abc)解释:这个正则表达式会匹配任何后面是“abc”的字符串。
和预查一样,它只是检查,并不会消耗字符。
非贪婪匹配表达式:a.*?b解释:这个正则表达式会匹配第一个出现的“b”之前的所有“a”。
点号(.)表示任何字符,星号(*)表示前面的元素可以重复0次或多次,问号(?)表示非贪婪匹配,也就是说它会尽可能少地匹配字符。
所以,这个正则表达式会匹配从第一个“a”到第一个“b”之间的所有字符。
特殊字符表达式:\d解释:这个正则表达式会匹配任何数字。
反斜杠(\)是一个转义字符,所以\d表示数字。
类似的,还有例如\w(匹配任何字母、数字或下划线),\s(匹配任何空白字符),等等。
数量词表达式:a{3,5}解释:这个正则表达式会匹配3个、4个或5个连续的“a”。
大括号表示数量词,它可以指定前面的元素必须出现的次数范围。
锚点表达式:^abc$解释:这个正则表达式只会匹配整个字符串“abc”。
脱字符(^)表示字符串的开始,美元符号($)表示字符串的结束。
所以这个正则表达式只会匹配一个只包含“abc”的字符串。
修饰符表达式:/i(在某些语言中)解释:这个修饰符使匹配对大小写不敏感。
正则表达式用法

正则表达式用法
正则表达式是一种以文本模式匹配字符串的工具。
它通过使用具有特殊语法和模式来描述或捕获文本片段,从而实现其多种功能。
使用正则表达式可以有效地从文本中查找和替换特定的信息。
所以它不仅只在编程语言中使用,也普遍用于文本编辑器、数据库和流行的应用程序之中Z。
正则表达式的核心是其特殊的正则语法。
它的正则语法能够表示通配符的集合,并能够根据指定的模式识别文本中的信息。
此外,正则表达式规则还有丙类限定符,诸如*、+等,用来指示要如何匹配限定符出现之前或之后的字符串。
在文本搜索与编辑任务中,正则表达式是一种有用的功能。
它可以帮助用户节省时间,提高效率,准确定位文本中的有趣信息,同时减少信息处理时间。
正则表达式界诹于文本搜索比普通的文本搜索方式具有优势。
它可以用来搜索文本,使搜索精确地定位与指定模式相匹配的字符串。
正则表达式也有其不足之处,它们需要一定的学习成本,而且不易理解和使用。
O此外,如果正则表达式编写出错,结果可能会是不预期的,甚至可能会有不可预料的故障。
总而言之,正则表达式是文本处理过程中一种有效实用的工具,它可以提高处理效率,提高文本搜索、编辑的准确性,提取文本中的有用信息,但需要学习成本和完备的谨慎使用,才能发挥最大的效用。
小甲鱼python 笔记

小甲鱼python 笔记小甲鱼的Python笔记可以参考以下内容:1. 搭建Python环境(python3):- print("Hello world!") #打印字符串"Hello world!"- 5+3 #进行计算 8- print('well water'+'river') #字符串的拼接- print('I Love You\n' *3) #字符串重复打印,\n为新起一行2. BIF概念(内置函数):- built-in functions(IDLE.shell)- python中用缩进表示代码块,通常是4个空格- 例:if guess == 8: #python中,一个=号是赋值,俩个=号表示左右相等- print('哇塞!你是我肚子里的蛔虫吗?!')- if else 语法 #条件分支- 学会绘画程序流程图(圆角方形、直角方形、菱形)- python中的内置函数 dir(builtins) #查询,全小写的表示BIF- help(input) #查询'input'BIF的功能3. 课后练习:- IDLE是什么?- IDLE是一个Python Shell,利用它可以与Python进行互动。
- print()的作用是什么?- print()会在输出窗口中显示一些文本。
在学习Python的过程中,需要注意Python是一个大小写敏感的语言,以及字符串类型为拼接,int或folat为求和。
在编程过程中,要注意区分“=”和“==”的含义,不可以弄混淆。
请注意,以上内容仅是一份简单的笔记参考,具体的学习内容和方法可能因个人情况和学习进度而有所不同。
在学习过程中,建议结合实际情况,制定适合自己的学习计划,并不断实践和总结,以达到更好的学习效果。
octopus 正则

Octopus 正则一、什么是 Octopus 正则Octopus 正则是一种基于正则表达式的文本匹配和替换工具。
它可以帮助用户快速、准确地搜索、提取和替换文本中的特定模式。
Octopus 正则支持各种常见的正则表达式语法,并提供了丰富的功能和选项,使用户能够灵活地处理各种文本处理任务。
二、Octopus 正则的基本用法1. 正则表达式语法Octopus 正则使用的是标准的正则表达式语法,用户可以利用正则表达式语法来定义自己需要匹配的模式。
以下是一些常用的正则表达式语法示例:•.:匹配任意字符;•*:匹配前一个字符的零个或多个实例;•+:匹配前一个字符的一个或多个实例;•?:匹配前一个字符的零个或一个实例;•\d:匹配一个数字字符;•\w:匹配一个字母、数字或下划线字符;•[]:匹配方括号中的任意一个字符;•():定义一个捕获组。
2. 搜索与提取Octopus 正则可以用于搜索和提取文本中的特定模式。
用户可以使用正则表达式来描述自己需要匹配的模式,并将其应用于待搜索的文本中。
Octopus 正则将会返回匹配到的结果,并可选择性地提取其中的特定部分。
以下是一个示例,演示如何使用 Octopus 正则搜索和提取邮箱地址:1.打开 Octopus 正则;2.在搜索框中输入正则表达式([a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4});3.在待搜索的文本中进行搜索;4.Octopus 正则将返回匹配到的邮箱地址。
3. 替换除了搜索和提取,Octopus 正则还可以用于替换文本中的特定模式。
用户可以使用正则表达式来描述需要替换的模式,并指定替换的内容。
以下是一个示例,演示如何使用 Octopus 正则替换文本中的电话号码:1.打开 Octopus 正则;2.在搜索框中输入正则表达式(\d{3})-(\d{4})-(\d{4});3.在替换框中输入替换的内容$1 $2 $3;4.在待替换的文本中进行替换;5.Octopus 正则将返回替换后的文本。
正则表达式 小甲鱼

正则表达式介绍(一)正则表达式(Regular expressions 也称为 REs,或 regexes 或 regex patterns)本质上是一个微小的且高度专业化的编程语言。
它被嵌入到 Python 中,并通过 re 模块提供给程序猿使用。
使用正则表达式,你需要指定一些规则来描述那些你希望匹配的字符串集合。
这些字符串集合可能包含英语句子、 e-mail 地址、TeX 命令,或任何你想要的东东。
正则表达式模式被编译成一系列的字节码,然后由一个 C 语言写的匹配引擎所执行。
对于高级的使用,你可能需要更关注匹配引擎是如何执行给定的 RE,并通过一定的方式来编写RE,以便产生一个可以运行得更快的字节码。
本文暂不讲解优化的细节,因为这需要你对匹配引擎的内部机制有一个很好的理解。
但本文的例子均是符合标准的正则表达式语法。
小甲鱼注释:Python 的正则表达式引擎是用 C 语言写的,所以效率是极高的。
另,所谓的正则表达式,这里说的 RE,就是上文我们提到的“一些规则”。
正则表达式语言相对较小,并且受到限制,所以不是所有可能的字符串处理任务都可以使用正则表达式来完成。
还有一些特殊的任务,可以使用正则表达式来完成,但是表达式会因此而变得非常复杂。
在这种情况下,你可能通过自己编写Python 代码来处理会更好些;尽管 Python 代码比一个精巧的正则表达式执行起来会慢一些,但可能会更容易理解。
小甲鱼注释:这可能是大家常说的“丑话说在前”吧,大家别管他,正则表达式非常优秀,她可以处理你 98.3% 的文本任务,一定要好好学哦~~~~~简单的模式我们将从最简单的正则表达式学习开始。
由于正则表达式常用于操作字符串的,因此我们从最常见的任务下手:字符匹配。
字符匹配大多数字母和字符会匹配它们自身。
举个例子,正则表达式 FishC 将完全匹配字符串 "FishC"。
(你可以启用不区分大小写模式,这将使得 FishC 可以匹配 "FISHC" 或 "fishc",我们会在后边讨论这个话题。
正则表达式介绍
正则表达式介绍正则表达式是一种强大的文本处理工具,它用于匹配、查找和替换文本中的模式。
它是一种特殊的语法,可以用于描述字符串的结构和内容。
在日常工作中,我们经常需要处理各种各样的文本数据,比如文本文件、数据库中的数据、网页中的内容等。
而正则表达式正是将这些文本数据进行有效处理的利器。
正则表达式的语法非常丰富,包含了大量的元字符和语法规则。
下面我们就来介绍一些常见的元字符和语法规则。
元字符元字符是正则表达式中的基本单位,它用于表示某种特殊的文本字符或字符集。
下面是一些常见的元字符:1. . :用于匹配任意一个字符,除了换行符(\n)。
2. ^ :用于匹配字符串的开头。
3. $ :用于匹配字符串的结尾。
4. * :用于匹配前面的字符出现0次或多次。
5. + :用于匹配前面的字符出现1次或多次。
6. ? :用于匹配前面的字符出现0次或1次。
7. | :用于表示或者的关系。
语法规则除了元字符之外,正则表达式还包含了许多语法规则。
下面是一些常见的语法规则:1. 字符集:方括号([])内表示要匹配的字符集,可以使用连字符(-)表示范围。
比如[0-9]表示匹配0到9之间的任意数字。
2. 分组:用小括号()来把多个元字符组合起来,形成一个整体。
比如(ab)+表示匹配一个或多个连续的"ab"。
3. 反向引用:用反斜杠(\)加数字来引用前面的分组。
比如(\w)\1表示匹配出现两次的任意单词字符。
4. 贪婪/非贪婪:在元字符后面加上问号(?)可以实现非贪婪模式。
比如.*?表示匹配尽可能少的任意字符。
5. 零宽度断言:用于限定匹配的位置,但不会消耗任何字符。
比如正向预查(?=)表示必须跟着某个模式,但不包含该模式;负向预查(?!)表示必须不跟着某个模式。
应用实例下面我们通过一些实例来演示正则表达式的应用:1. 匹配手机号码:^(13\d|14[579]|15[^4\D]|17[^49\D]|18\d)\d{8}$2. 匹配IP地址:^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$3. 匹配邮箱地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$4. 匹配HTML标签:<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>结语正则表达式是一个非常强大的工具,可以用于各种各样的文本处理任务。
正则表达式实例详解
正则表达式实例详解正则表达式实例详解正则表达式(regular expression)是一种特殊的文本格式,用于搜索、替换和验证文本中的字符串。
它可以用来查找文本中的某些结构,也可以用来修改文本的某些部分。
正则表达式具有良好的易读性和可维护性,并且可以有效地捕获文本中的模式,从而使文本处理变得更加简单。
正则表达式有着复杂的语法,但是它也是一种非常有效的工具,可以帮助我们在文本中快速搜索和替换想要的内容。
下面就来看看几个常用的正则表达式实例,以加深大家对它的理解。
1. 字符集匹配:[abcd]这个正则表达式可以用来匹配文本中任意一个字符,其中字符可以是a、b、c或d中的任意一个。
2. 通配符匹配:.这个正则表达式可以用来匹配文本中任意一个字符,不论该字符是什么(除了换行符之外)。
3. 范围匹配:[a-z]这个正则表达式可以用来匹配文本中任意一个小写字母,其中字母可以是a到z之间的任意一个。
4. 重复匹配:a{3}这个正则表达式可以用来匹配文本中连续三个字符a,如aaaa。
5. 否定匹配:[^abc]这个正则表达式可以用来匹配文本中除了a、b、c之外的任意一个字符。
6. 前瞻:(?=abc)这个正则表达式可以用来匹配文本中任意位置后跟着abc字符串的字符,即使abc不是要被匹配的字符串,只是一个前瞻。
7. 零宽断言:(?!abc)这个正则表达式可以用来匹配文本中任意位置后不跟着abc字符串的字符。
8. 分组:(abc|def)这个正则表达式可以用来匹配文本中任意位置的abc 或者def字符串。
以上就是正则表达式实例详解,其中包括了字符集匹配、通配符匹配、范围匹配、重复匹配、否定匹配、前瞻、零宽断言以及分组等实例。
正则表达式的最大优点是可以有效地捕获文本中的模式,可以有效地进行文本处理,比如查找、替换、验证等。
正则表达式的语法有着一定的复杂度,但是只要掌握了它的一些基本原理,就可以用它来快速处理文本中的字符串。
正则表达式讲解
正则表达式讲解正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a到z之间的字母)和特殊字符(称为“元字符”),是计算机科学的一个概念。
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。
它通常被用来检索、替换那些符合某个模式(规则)的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。
例如,在Perl中就内建了一个功能强大的正则表达式引擎。
正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开来的,后来在广泛运用于Scala、PHP、C#、Java、C++、Objective-c、Perl、Swift、VBScript、Javascript、Ruby以及Python等等。
正则表达式由普通字符以及特殊字符组成。
例如,“^a”匹配以字母“a”开头的字符串,“a”匹配以字母“a”结尾的字符串,“a”则只匹配整个由字母“a”组成的字符串。
正则表达式中的特殊字符包括:^匹配字符串的开头$匹配字符串的结尾.匹配任意字符,除了换行符**转义特殊字符[...]定义字符集[^...]定义反向字符集(不在该字符集内的字符)[a-z]定义范围字符集[0-9]定义范围字符集,相当于\d\d匹配任意十进制数字,相当于[0-9]\D匹配任意非数字字符,相当于[^0-9]\s匹配任意空白字符,相当于[\f\n\r\t\v]\S匹配任意非空白字符,相当于[^f\n\r\t\v]\w匹配任意字母数字字符,相当于[a-zA-Z0-9_]\W匹配任意非字母数字字符,相当于[^a-zA-Z0-9_]***** 匹配前面的子表达式零次或多次+匹配前面的子表达式一次或多次匹配前面的子表达式零次或一次{n}匹配前面的子表达式n次{n,}匹配前面的子表达式n次或更多次{n,m}匹配前面的子表达式至少n次,但不超过m次此外,还有一些特殊的量词,可以用来表示重复次数,例如:{n,m}表示匹配前面的字符至少n次,最多m次。
正则表达式举例
正则表达式举例正则表达式,又称规则表达式(常简称为regex),是一种计算机科学的概念。
这些表达式用于匹配、查找及替换文本中字符串的特定模式。
例如,一个简单的正则表达式可以是 "/\d+/"。
这个表达式的含义是查找一或更多的数字字符串。
在这个表达式中,“\d”表示一个数字字符,“+”表示前面的元素至少出现一次。
另一个常见的正则表达式是 “/^abc/”。
这个表达式的含义是找出以"abc"开头的字符串。
在这个表达式中,“^”表示字符串的开始,“abc”就是要匹配的具体字符串。
第三个例子是"/\b\w{3}\b/"。
这个表达式的含义是找出长度为3个字符的单词。
在这个表达式中,“\b”表示词的开始和结束,“\w”表示任意字母或数字字符,“{3}”表示前面的元素出现三次。
然后,还有一个常用的表达式 "/[A-Z][a-z]*/"。
这个表达式的含义是找出首字母为大写,字母为小写的单词。
在这个表达式中,“[A-Z]”表示任意一个大写字母,“[a-z]”表示任意小写字母,“*”表示前面的元素可以出现零次或者多次。
最后,一个复杂的正则表达式例子是 "/\b[a-z]+\b/i"。
这个表达式来找出所有的英文单词,不区分大小写。
在这个表达式中,“\b”表示词的开始和结束,“[a-z]+”表示一个或多个小写字母,“i”表示忽略大小写。
正则表达式是非常强大的工具,但是它们也非常复杂。
对于初学者来说,理解和创建正则表达式可能需要花费一些时间。
但是,一旦掌握了这个技能,就能更有效地处理字符串了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
正则表达式介绍(一)正则表达式(Regular expressions 也称为 REs,或 regexes 或 regex patterns)本质上是一个微小的且高度专业化的编程语言。
它被嵌入到 Python 中,并通过 re 模块提供给程序猿使用。
使用正则表达式,你需要指定一些规则来描述那些你希望匹配的字符串集合。
这些字符串集合可能包含英语句子、 e-mail 地址、TeX 命令,或任何你想要的东东。
正则表达式模式被编译成一系列的字节码,然后由一个 C 语言写的匹配引擎所执行。
对于高级的使用,你可能需要更关注匹配引擎是如何执行给定的 RE,并通过一定的方式来编写RE,以便产生一个可以运行得更快的字节码。
本文暂不讲解优化的细节,因为这需要你对匹配引擎的内部机制有一个很好的理解。
但本文的例子均是符合标准的正则表达式语法。
小甲鱼注释:Python 的正则表达式引擎是用 C 语言写的,所以效率是极高的。
另,所谓的正则表达式,这里说的 RE,就是上文我们提到的“一些规则”。
正则表达式语言相对较小,并且受到限制,所以不是所有可能的字符串处理任务都可以使用正则表达式来完成。
还有一些特殊的任务,可以使用正则表达式来完成,但是表达式会因此而变得非常复杂。
在这种情况下,你可能通过自己编写Python 代码来处理会更好些;尽管 Python 代码比一个精巧的正则表达式执行起来会慢一些,但可能会更容易理解。
小甲鱼注释:这可能是大家常说的“丑话说在前”吧,大家别管他,正则表达式非常优秀,她可以处理你 98.3% 的文本任务,一定要好好学哦~~~~~简单的模式我们将从最简单的正则表达式学习开始。
由于正则表达式常用于操作字符串的,因此我们从最常见的任务下手:字符匹配。
字符匹配大多数字母和字符会匹配它们自身。
举个例子,正则表达式 FishC 将完全匹配字符串 "FishC"。
(你可以启用不区分大小写模式,这将使得 FishC 可以匹配 "FISHC" 或 "fishc",我们会在后边讨论这个话题。
)当然这个规则也有例外。
有少数特殊的字符我们称之为元字符(metacharacter),它们并不能匹配自身,它们定义了字符类、子组匹配和模式重复次数等。
本文用很大的篇幅专门讨论了各种元字符及其作用。
下边是元字符的完整列表(我们将在后边逐一讲解):. ^ $ * + ? { } [ ] | ( )小甲鱼注释:如果没有这些元字符,正则表达式就变得跟字符串的 find() 方法一样平庸了......我们先来看下方括号 [ ],它们指定一个字符类用于存放你需要匹配的字符集合。
可以单独列出需要匹配的字符,也可以通过两个字符和一个横杆 - 指定匹配的范围。
例如 [abc] 会匹配字符 a,b 或 c;[a-c] 可以实现相同的功能。
后者使用范围来表示与前者相同的字符集合。
如果你想只匹配小写字母,你的 RE 可以写成 [a-z]。
需要注意的一点是:元字符在方括号中不会触发“特殊功能”,在字符类中,它们只匹配自身。
例如 [akm$] 会匹配任何字符 'a','k','m' 或 '$','$' 是一个元字符,但在方括号中它不表示特殊含义,它只匹配 '$' 字符本身。
你还可以匹配方括号中未列出的所有其他字符。
做法是在类的开头添加一个脱字符号 ^ ,例如 [^5] 会匹配除了 '5' 之外的任何字符。
或许最重要的元字符当属反斜杠了。
跟 Python 的字符串规则一样,如果在反斜杠后边紧跟着一个元字符,那么元字符的“特殊功能”也不会被触发。
例如你需要匹配符号 [ 或,你可以在它们前面加上一个反斜杠,以消除它们的特殊功能:[,\。
反斜杠后边跟一些字符还可以表示特殊的意义,例如表示十进制数字,表示所有的字母或者表示非空白的字符集合。
小甲鱼解释:反斜杠真牛逼,反斜杠后边跟元字符去除特殊功能,反斜杠后边跟普通字符实现特殊功能。
让我们来举个例子:w 匹配任何字符。
如果正则表达式以字节的形式表示,这相当于字符类 [a-zA-Z0-9_];如果正则表达式是一个字符串,w 会匹配所有 Unicode 数据库(unicodedata 模块提供)中标记为字母的字符。
你可以在编译正则表达式的时候,通过提供 re.ASCII 表示进一步限制 w 的定义。
小甲鱼解释:re.ASCII 标志使得 w 只能匹配 ASCII 字符,不要忘了,Python3 是Unicode 的。
下边列举一些反斜杠加字符构成的特殊含义:它们可以包含在一个字符类中,并且一样拥有特殊含义。
例如 [s,.] 是一个字符类,它将匹配任何空白字符(/s 的特殊含义),',' 或 '.'。
最后我们要讲的一个元字符是 .,它匹配除了换行符以外的任何字符。
如果设置了re.DOTALL 标志,. 将匹配包括换行符在内的任何字符。
重复的事情使用正则表达式能够轻松的匹配不同的字符集合,但 Python 字符串现有的方法却无法实现。
然而,如果你认为这是正则表达式的唯一优势,那你就 too young too native 了。
正则表达式有另一个强大的功能,就是你可以指定 RE 部分被重复的次数。
我们来看看 * 这个元字符,当然它不是匹配 '*' 字符本身(我们说过元字符都是有特殊能力的),它用于指定前一个字符匹配零次或者多次。
例如 ca*t 将匹配 ct(0 个字符 a),cat(1 个字符 a),caaat(3 个字符 a),等等。
需要注意的是,由于受到 C 语言的 int 类型大小的内部限制,正则表达式引擎会限制字符'a' 的重复个数不超过 20 亿个;不过,通常我们工作中也用不到那么大的数据。
正则表达式默认的重复规则是贪婪的,当你重复匹配一个 RE 时,匹配引擎会尝试尽可能多的去匹配。
直到 RE 不匹配或者到了结尾,匹配引擎就会回退一个字符,然后再继续尝试匹配。
我们通过例子一步步的给大家讲解什么叫“贪婪”:先考虑一下表达式 a[bcd]*b,首先需要匹配字符 'a',然后是零个到多个 [bcd],最后以 'b' 结尾。
那现在想象一下,这个 RE匹配字符串 abcbd 会怎样?最灵活的应该是元字符 {m, n}(m 和 n 都是十进制整数),上边讲到的几个元字符都可以使用它来表达,它的含义是前一个字符必须匹配 m 次到 n 次之间。
例如 a/{1, 3}b 会匹配 a/b,a//b 和 a///b。
但不会匹配 ab(没有斜杠);也不会匹配a////b(斜杠超过三个)。
你可以省略 m 或者 n,这样的话,引擎会假定一个合理的值代替。
省略 m,将被解释为下限 0;省略 n 则会被解释为无穷大(事实上是上边我们提到的 20 亿)。
小甲鱼解释:如果是 {, n} 相当于 {0, n};如果是 {m, } 相当于 {m, +无穷};如果是 {n},则是重复前一个字符 n 次。
聪明的鱼油应该已经发现了,其实 *、+ 和 ? 都可以使用 {m, n} 来代替。
{0,} 跟 * 是一样的;{1, } 跟 + 是一样的;{0, 1}跟 ? 是一样的。
不过还是鼓励大家记住并使用 *、+ 和 ?,因为这些字符更短并且更容易阅读。
小甲鱼解释:还有一个原因是匹配引擎对 * + ? 做了优化,效率要更高些。
使用正则表达式(二)现在我们开始来写一些简单的正则表达式吧。
Python 通过 re 模块为正则表达式引擎提供一个接口,同时允许你将正则表达式编译成模式对象,并用它们来进行匹配。
小甲鱼解释:re 模块是使用 C 语言编写,所以效率比你用普通的字符串方法要高得多;将正则表达式进行编译(compile)也是为了进一步提高效率;后边我们会经常提到“模式”,指的就是正则表达式被编译成的模式对象。
编译正则表达式正则表达式被编译为模式对象,该对象拥有各种方法供你操作字符串,如查找模式匹配或者执行字符串替换。
>>> import re>>> p = pile('ab*')>>> p<_sre.SRE_Pattern object at 0x...>复制代码pile() 也可以接受 flags 参数,用于开启各种特殊功能和语法变化,我们会在后边一一介绍。
现在我们先来看个简单的例子:>>> p = pile('ab*', re.IGNORECASE)复制代码正则表达式作为一个字符串参数传给 pile()。
由于正则表达式并不是 Python 的核心部分,因此没有为它提供特殊的语法支持,所以正则表达式只能以字符串的形式表示。
(有些应用根本就不需要使用到正则表达式,所以 Python 社区的小伙伴们认为没有必要将其纳入 Python 的核心。
)相反,re 模块仅仅是作为 C 的扩展模块包含在 Python 中,就像 socket 模块和 zlib 模块。
使用字符串来表示正则表达式保持了Python 简洁的一贯风格,但也因此有一些负面影响,下边我们就来谈一谈。
麻烦的反斜杠上一篇中我们已经提到了,正则表达式使用 '\' 字符来使得一些普通的字符拥有特殊的能力(例如 \d 表示匹配任何十进制数字),或者剥夺一些特殊字符的能力(例如 \[ 表示匹配左方括号 '[')。
这会跟 Python 字符串中实现相同功能的字符发生冲突。
小甲鱼解释:挺拗口,接着看例子你就懂了~现在的情况是,你需要在 LaTeX 文件中使用正则表达式匹配字符串 '\section'。
因为反斜杠作为需要匹配的特殊字符,所以你需要再它前边加多一个反斜杠来剥夺它的特殊功能。
所以我们会把正则表达式的字符写成 '\\section'。
但不要忘了,Python 在字符串中同样使用反斜杠来表示特殊意义。
因此,如果我们想将'\\section' 完整地传给 pile(),我们需要再次添加两个反斜杠......匹配字符匹配阶段\section 需要匹配的字符串\\section正则表达式使用 '\\' 表示匹配字符 '\'"\\\\section" 不巧,Python 字符串也使用 '\\' 表示字符 '\'简而言之,为了匹配反斜杠这个字符,我们需要在字符串中使用四个反斜杠才行。