正则表达式 小甲鱼
正则表达式使用方法
正则表达式使用方法
正则表达式是一种用于匹配字符串模式的工具,可以用于文本搜索和替换、数据验证等多种场景。
在实际使用中,我们需要掌握一些基本的正则表达式语法,以及一些常用的表达式组合,才能更加高效地处理字符串。
下面介绍一些常见的正则表达式用法:
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.什么是正则表达式简单的说,正则表达式是一种可以用于文字模式匹配和替换的强有力的工具。
是由一系列普通字符和特殊字符组成的能明确描述文本字符串的文字匹配模式。
正则表达式并非一门专用语言,但也可以看作是一种语言,它可以让用户通过使用一系列普通字符和特殊字符构建能明确描述文本字符串的匹配模式。
除了简单描述这些模式之外,正则表达式解释引擎通常可用于遍历匹配,并使用模式作为分隔符来将字符串解析为子字符串,或以智能方式替换文本或重新设置文本格式。
正则表达式为解决与文本处理有关的许多常见任务提供了有效而简捷的方式。
正则表达式具有两种标准:·基本的正则表达式(BRE –Basic Regular Expressions)·扩展的正则表达式(ERE – Extended Regular Expressions)。
ERE包括BRE功能和另外其它的概念。
正则表达式目前有两种解释引擎:·基于字符驱动(text-directed engine)·基于正则表达式驱动(regex-directed engine)Jeffery Friedl把它们称作DFA和NFA解释引擎。
约定:为了描述起来方便,在本文中做一些约定:1.本文所举例的所有表达时都是基于NFA解释引擎的。
2.正则表达式,也就是匹配模式,会简写为Regex。
3. Regex的匹配目标,也就是目标字符串,会简写为String。
4.匹配结果用会用黄色底色标识。
5.用1\+1=2 括起来的表示这是一个regex。
6.举例会用以下格式:testThis is a test会匹配test,testcase等2.正则表达式的起源正则表达式的”祖先”可以一直上溯至对人类神经系统如何工作的早期研究。
Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。
正则表达式定义及使用方法
正则表达式定义及使用方法宝子!今天咱来唠唠正则表达式。
正则表达式呢,就像是一种魔法咒语,专门用来处理文本的。
它是一种用来描述、匹配一系列符合某个句法规则的字符串的单个字符串。
简单说,就是你给它定个规则,它就能按照这个规则在一大串文字里找到你想要的内容。
比如说,你有一篇超级长的文章,里面有好多电话号码,你想把这些电话号码都找出来。
这时候正则表达式就大显身手啦。
你可以写个规则,像“以1开头,后面跟着10个数字”这样的规则,它就能在文章里把符合这个规则的电话号码都给你揪出来。
那正则表达式咋用呢?不同的编程语言里都能用到它,不过语法可能会有点小区别。
咱就拿Python来说哈。
在Python里,有个re模块就是专门用来处理正则表达式的。
要是你想匹配一个简单的单词,像“cat”。
你就可以这样写正则表达式:“cat”。
然后用re模块的相关函数,比如说re.search(),这个函数就会在你给的字符串里去找有没有“cat”这个单词。
如果有,它就会告诉你这个单词在字符串里的位置之类的信息。
要是你想更灵活一点,比如说匹配以“a”开头的单词。
那正则表达式可以写成“a\w*”。
这里的“\w”就代表字母或者数字,“*”表示前面的字符可以出现零次或者多次。
不过呢,正则表达式刚接触的时候可能会觉得有点头疼,那些符号就像神秘的小密码一样。
但是一旦你掌握了一些基本的规则,就会发现它超级好用。
就像你学会了一个超级厉害的小魔法,在处理文本的时候就可以随心所欲啦。
而且啊,正则表达式在很多场景都有用武之地。
像验证用户输入的邮箱格式对不对呀,从网页源代码里提取特定的信息呀。
总之呢,它是文本处理世界里的一个超棒的小工具,只要你有耐心去了解它,它就会成为你的得力小助手哦。
正则表达式 语法
正则表达式语法
正则表达式,又叫规则表达式,是一种特殊的文本模式,它可以用来检查一个字符串是否符合某种模式,或者提取一个字符串中符合某种模式的部分,它是一种非常强大的工具,可以用来解决许多常见的文本处理问题。
正则表达式由普通字符(例如字母和数字)和特殊字符(称为元字符)组成,元字符可以指定文本的类型,如数字,大写字母,小写字母等。
正则表达式可以用来搜索、替换、拆分或提取文本,也可以用来验证文本是否符合某种格式。
正则表达式有助于快速处理文本,特别是大型文本。
例如,可以使用正则表达式来搜索一个文档中的所有电子邮件地址,甚至可以使用正则表达式来检查电子邮件地址是否有效。
正则表达式也可以用于替换文本。
例如,可以使用正则表达式将一个文档中的所有网址替换为其他格式,或者将一个文档中的所有数字替换为千分位格式。
正则表达式也可以用于拆分文本。
例如,可以使用正则表达式将一个文本字符串拆分为多个部分,或者将一个文档中的所有句子拆分为单独的段落。
正则表达式也可以用于提取文本。
例如,可以使用正则表达式从一
个文档中提取出所有的电话号码,或者从一个文件中提取出所有的URL地址。
总之,正则表达式是一种强大的工具,可以用来快速处理和分析文本,从而节省大量的时间和精力。
它可以帮助我们快速检查文本是否符合某种格式,也可以帮助我们搜索、替换、拆分或提取文本,从而解决许多常见的文本处理问题。
正则表达式知识详解
正则表达式知识详解⼀、什么是正则表达式?1.定义:正则表达式(regular expression)描述了⼀种字符串匹配的模式,可以⽤来检查⼀个串是否含有某种⼦串、将匹配的⼦串做替换或者从某个串中取出符合某个条件的⼦串等。
构造正则表达式的⽅法和创建数学表达式的⽅法⼀样。
也就是⽤多种元字符与运算符可以将⼩的表达式结合在⼀起来创建更⼤的表达式。
正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
2.组成:正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的⽂字模式。
模式描述在搜索⽂本时要匹配的⼀个或多个字符串。
正则表达式作为⼀个模板,将某个字符模式与所搜索的字符串进⾏匹配。
3.何时使⽤:验证——从头到尾完整匹配!查找——只要部分匹配即可!⼆、正则表达式的基本语法和规则1.备选字符集:规定某*⼀位字符*可⽤的备选字符的集合语法:[可选字符列表]强调:1. ⽆论备选字符集包含多少字符,只能选1个2. 必须选1个!⽐如:6位数字的密码[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]简化:1. 当备选字符连续时,可⽤-表⽰范围的区间⽐如:[0123456789]-->[0-9][0-9][0-9][0-9][0-9][0-9][0-9][a-z]-->1位⼩写字母[A-Z]-->1位⼤写字母[A-Za-z]-->1位字母,⼤⼩写都⾏[0-9a-zA-Z]-->1位字母或数字都⾏反选:[^不能选的字符列表]⽐如:[^47] 强调:^作“除了”使⽤时,只能放在开头2. 预定义字符集:为常⽤的字符集专门提供的简化写法!“\d”-->[0-9]-->1位数字“\w”-->[0-9a-zA-Z_]-->1位字母,数字或_“\s”-->1位空字符:匹配任何空⽩字符,包括空格、制表符、换页符等等。
正则表达式匹配各种特殊字符
正则表达式匹配各种特殊字符写个可以匹配⼀下各种特殊字符的正则表达式((?=[ 21- 7e]+)[^A-Za-z0-9])x21- 7e]+)[^A-Za-z0-9])这个匹配所有键盘上可见的⾮字母和数字的符号var patrn = /[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘',。
、]/im;if (!patrn.test(str)) {// 如果包含特殊字符返回falsereturn false;}return true;这个是输⼊框防⽌特殊字符勿输⼊验证,包括键盘上所有特殊字符的英⽂和中⽂状态。
需要者可以根据⾃⾝需求⽽定!谢谢![^\w\s]+匹配⾮空⾮字母⾮数字即可1 数字:^[0-9]*$2 n位的数字:^\d{n}$3 ⾄少n位的数字:^\d{n,}$4 m-n位的数字:^\d{m,n}$5 零和⾮零开头的数字:^(0|[1-9][0-9]*)$6 ⾮零开头的最多带两位⼩数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$7 带1-2位⼩数的正数或负数:^(\-)?\d+(\.\d{1,2})?$8 正数、负数、和⼩数:^(\-|\+)?\d+(\.\d+)?$9 有两位⼩数的正实数:^[0-9]+(.[0-9]{2})?$10 有1~3位⼩数的正实数:^[0-9]+(.[0-9]{1,3})?$11 ⾮零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$12 ⾮零的负整数:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$13 ⾮负整数:^\d+$ 或 ^[1-9]\d*|0$14 ⾮正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$15 ⾮负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$16 ⾮正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$17 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$18 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$19 浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$⼆、校验字符的表达式1 汉字:^[\u4e00-\u9fa5]{0,}$2 英⽂和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$3 长度为3-20的所有字符:^.{3,20}$4 由26个英⽂字母组成的字符串:^[A-Za-z]+$5 由26个⼤写英⽂字母组成的字符串:^[A-Z]+$6 由26个⼩写英⽂字母组成的字符串:^[a-z]+$7 由数字和26个英⽂字母组成的字符串:^[A-Za-z0-9]+$8 由数字、26个英⽂字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$9 中⽂、英⽂、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$10 中⽂、英⽂、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$11 可以输⼊含有^%&',;=?$\"等字符:[^%&',;=?$ 22]+12 禁⽌输⼊含有~的字符:[^~ 22]+三、特殊需求表达式1 Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$a、⾃定义完美的邮箱验证:(java)^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$ b、(js或jq)^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$2 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?4 ⼿机号码最新:^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$(java)^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\d{8}$(js或jq)5 电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$6 国内电话号码(0511-*******、021-********):\d{3}-\d{8}|\d{4}-\d{7}7 ⾝份证号(15位、18位数字):^\d{15}|\d{18}$8 短⾝份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$9 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$10 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$11 强密码(必须包含⼤⼩写字母和数字的组合,不能使⽤特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$12 ⽇期格式:^\d{4}-\d{1,2}-\d{1,2}13 ⼀年的12个⽉(01~09和1~12):^(0?[1-9]|1[0-2])$14 ⼀个⽉的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$15 钱的输⼊格式:16 1.有四种钱的表⽰形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$17 2.这表⽰任意⼀个不以0开头的数字,但是,这也意味着⼀个字符"0"不通过,所以我们采⽤下⾯的形式:^(0|[1-9][0-9]*)$18 3.⼀个0或者⼀个不以0开头的数字.我们还可以允许开头有⼀个负号:^(0|-?[1-9][0-9]*)$19 4.这表⽰⼀个0或者⼀个可能为负的开头不为0的数字.让⽤户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下⾯我们要加的是说明可能的⼩数部分:^[0-9]+(.[0-9]+)?$20 5.必须说明的是,⼩数点后⾯⾄少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$21 6.这样我们规定⼩数点后⾯必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$22 7.这样就允许⽤户只写⼀位⼩数.下⾯我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$23 8.1到3个数字,后⾯跟着任意个逗号+3个数字,逗号成为可选,⽽不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$24 备注:这就是最终结果了,别忘了"+"可以⽤"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在⽤函数时去掉去掉那个反斜杠,⼀般的错误都在这⾥25 xml⽂件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$26 中⽂字符的正则表达式:[\u4e00-\u9fa5]27 双字节字符:[^ 00- ff] (包括汉字在内,可以⽤来计算字符串的长度(⼀个双字节字符长度计2,ASCII字符计1))28 空⽩⾏的正则表达式:\n\s*\r (可以⽤来删除空⽩⾏)29 HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? /> (⽹上流传的版本太糟糕,上⾯这个也仅仅能部分,对于复杂的嵌套标记依旧⽆能为⼒)30 ⾸尾空⽩字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$) (可以⽤来删除⾏⾸⾏尾的空⽩字符(包括空格、制表符、换页符等等),⾮常有⽤的表达式)31 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)32 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字) 33 IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址时有⽤) 34 IP地址:((?: (?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))正则表达式可以为空值,不为空则要格式。
正则表达式使用工具教程
正则表达式使用工具教程正则表达式-教程正则表达式是烦琐的,但是它是强大的,在八爪鱼中,学会正则表达式的应用能让你的数据展示更加规范化,所提取数据字段表达更加精准。
合理的运用正则,除了提升你的数据展示规范、字段表达精准之外,还会给你带来绝对的成就感。
只要认真阅读本教程,结合八爪鱼正则表达式工具实战应用,掌握正则表达式是非常容易的。
内容列表:11.1正则表达式-简介11.2正则表达式-简单示例11.3-正则表达式-八爪鱼正则工具11.4正则表达式-语法11.5正则表达式-正则表达式及简单应用11.1正则表达式-简介正则表达式(Regular Expression),按英文直译是“规范化表达”,其作用是将复杂模糊的源数据通过正则表达式转化为简单直观的目标数据。
例如:“150ABCD”“一百五ABCD”“One hundred and fiftyABCD”分析思考过程:以上字符串中,我们的源文本数据分别为:““150ABCD”、“一百五ABCD”、“One hundred and fiftyABCD”假设我们要提取目标数据为:字符串中以数字开头的数据那么我们约束条件为:只取字符串中以数字开头的源数据将此约束条件转化为正则表达式为:[0-9](.+)\b其中,[0-9]的语义为开头1位为0-9开头,中间间隔以通配符“.”代替,(.+)语义为字符串长度不做限定,\b的语义为,匹配一个边界。
正则后的目标数据:“150ABCD”通过这个简单例子,我们大致了解到了为什么要用正则与正则所能实现的效果,讲通俗点就是,正则只是将我们的意愿(提取字符串中以数字开头的数据)以表达式的形式展现出来([0-9](.+)\b),并最终通过表达式匹配到所需要的目标数据(“150ABCD”),所以灵活运用正则,可以通过简单的方法实现强大的功能。
为什么要在八爪鱼中使用正则?在八爪鱼采集数据过程中,受限于网页HTML结构的原因,部分目标数据并不能单独提取出来,这时需要简单的搜索与替换操作来提取与预期搜索结果匹配的确切文本,除此之外,对数据要求精准规范的用户,还能通过正则表达式测试所提取数据字符串的模式、替换文本、基于匹配模式从字符串中提取子字符串等操作。
正则表达式用法详解
正则表达式⽤法详解正则表达式之基本概念在我们写页⾯时,往往需要对表单的数据⽐如账号、⾝份证号等进⾏验证,⽽最有效的、⽤的最多的便是使⽤正则表达式来验证。
那什么是正则表达式呢?正则表达式(Regular Expression)是⽤于描述⼀组字符串特征的模式,⽤来匹配特定的字符串。
它的应⽤⾮常⼴泛,特别是在字符串处理⽅⾯。
其常见的应⽤如下:验证字符串,即验证给定的字符串或⼦字符串是否符合指定的特征,例如,验证是否是合法的邮件地址、验证是否是合法的HTTP地址等等。
查找字符串,从给定的⽂本当中查找符合指定特征的字符串,这样⽐查找固定字符串更加灵活。
替换字符串,即查找到符合某特征的字符串之后将之替换。
提取字符串,即从给定的字符串中提取符合指定特征的⼦字符串。
第⼀部分:正则表达式之⼯具正所谓⼯欲善其事必先利其器! 所以我们需要知道下⾯⼏个主要的⼯具:第⼆部分:正则表达式之元字符正则表达式中元字符恐怕是我们听得最多的了。
元字符(Metacharacter)是⼀类⾮常特殊的字符,它能够匹配⼀个位置或者字符集合中的⼀个字符。
如.、\w等都是元字符。
刚刚说到,元字符既可以匹配位置,也可以匹配字符,那么我们就可以通过此来将元字符分为匹配位置的元字符和匹配字符的元字符。
A匹配位置的元字符---^、$、\b即匹配位置的元字符只有^(脱字符号)、$(美元符号)和\b这三个字符。
分别匹配⾏的开始、⾏的结尾以及单词的开始或结尾。
它们匹配的都只是位置。
1.^匹配⾏的开始位置如^zzw匹配的是以"zzw"为⾏开头的"zzw"(注意:我这⾥想要表达的是:尽管加了⼀个^,它匹配的仍是字符串,⽽不是⼀整⾏!),如果zzw不是作为⾏开头的字符串,则它不会被匹配。
2.$匹配⾏的结尾位置如zzw$匹配的是以"zzw"为⾏结尾的"zzw"(同样,这⾥$只是匹配的⼀个位置,那个位置是零宽度,⽽不是⼀整⾏),如果zzw不是作为⾏的结尾,那么它不会被匹配。
Python3 正则表达式特殊符号及用法
Python3 正则表达式特殊符号及用法(详细列表)正则表达式的强大之处在于特殊符号的应用,特殊符号定义了字符集合、子组匹配、模式重复次数。
正是这些特殊符号使得一个正则表达式可以匹配字符串集合而不只是一个字符串。
注1:为了便于理解,难点的地方均用斜体举了栗子。
注2:如果你对正则表达式一头雾水或者看不懂下边这个列表,那么小甲鱼极力推荐你先学习这个:Python3 如何优雅地使用正则表达式字符含义表示匹配除了换行符外的任何字符.注:通过设置re.DOTALL 标志可以使 . 匹配任何字符(包含换行符)| A | B,表示匹配正则表达式A 或者B1. (脱字符)匹配输入字符串的开始位置^2. 如果设置了re.MULTILINE 标志,^ 也匹配换行符之后的位置1. 匹配输入字符串的结束位置$2. 如果设置了re.MULTILINE 标志,$ 也匹配换行符之前的位置1. 将一个普通字符变成特殊字符,例如 \d 表示匹配所有十进制数字\2. 解除元字符的特殊功能,例如 \. 表示匹配点号本身3. 引用序号对应的子组所匹配的字符串4. 详见下方列举[...] 字符类,匹配所包含的任意一个字符注1:连字符 - 如果出现在字符串中间表示字符范围描述;如果如果出现仅作为普通字符注2:特殊字符仅有反斜线 \ 保持特殊含义,用于转义字符。
其它特殊字+、? 等均作为普通字符匹配注3:脱字符 ^ 如果出现在首位则表示匹配不包含其中的任意字符;如果在字符串中间就仅作为普通字符匹配{M,N} M 和N 均为非负整数,其中M <= N,表示前边的RE 匹配M ~ N 注1:{M,} 表示至少匹配M 次注2:{,N} 等价于{0,N}注3:{N} 表示需要匹配N 次* 匹配前面的子表达式零次或多次,等价于{0,} + 匹配前面的子表达式一次或多次,等价于{1,} ? 匹配前面的子表达式零次或一次,等价于{0,1}*?, +?, ?? 默认情况下 *、+ 和 ? 的匹配模式是贪婪模式(即会尽可能多地匹配符合符串);*?、+? 和?? 表示启用对应的非贪婪模式。
正则表达式教程
正则表达式教程正则表达式(Regular Expression),又称规则表达式,是一种用来描述字符序列的强大工具。
它主要用于字符串的模式匹配、查找替换以及验证输入等各种操作。
正则表达式由一些字符和特殊字符组成,通过组合这些字符来指定一个匹配模式。
在正则表达式中,使用一些特殊字符来表示不同的意义,比如:1. 元字符(Metacharacters):用于描述模式的特殊字符,如"."表示匹配除换行符之外的任意字符,"[]"表示匹配括号内的任意一个字符等。
2. 量词(Quantifiers):用于描述匹配次数的特殊字符,如"*"表示匹配前一个字符0次或多次,"+"表示匹配前一个字符1次或多次,"?"表示匹配前一个字符0次或1次等。
3. 转义字符(Escape Characters):用于将特殊字符转义为普通字符,如"\."表示匹配真正的点字符,而不是元字符"."表示的任意字符。
正则表达式可以通过各种编程语言来实现,常见的有Python、JavaScript、Java、Perl等。
不同的编程语言对正则表达式的支持程度不同,但基本的语法规则是相通的。
使用正则表达式,可以实现很多常见的操作,比如:1. 匹配字符串:通过正则表达式来判断一个字符串是否与某个模式匹配。
2. 查找替换:可以在一个字符串中查找匹配某个模式的部分,并进行替换。
3. 分割字符串:可以根据某个模式将一个字符串分割成多个部分。
4. 验证输入:可以用正则表达式对用户输入的数据进行验证,比如邮箱、手机号等。
5. 提取信息:可以提取一个字符串中符合某个条件的部分,比如提取出所有URL链接。
正则表达式是一个非常强大和灵活的工具,但也经常被人们认为难以理解和编写。
因此,掌握正则表达式的基本语法和常用操作是很有必要的。
dolphindb的正则表达式
dolphindb的正则表达式DolphinDB正则表达式详解引言正则表达式是一种用来匹配、检索和替换文本的强大工具。
在DolphinDB中,我们可以利用正则表达式来进行复杂的模式匹配和文本处理操作。
本文将详细介绍DolphinDB中正则表达式的使用方法和常见应用场景。
正则表达式基础知识正则表达式由一系列字符和特殊字符组成,用于定义一种规则来匹配和处理文本。
在DolphinDB中,正则表达式通常用于字符串的模式匹配、查找和替换操作。
下面是一些常用的正则表达式元字符和元符号的含义:. 匹配任意单个字符(除了换行符)* 匹配零个或多个前面的字符+ 匹配一个或多个前面的字符匹配零个或一个前面的字符^ 匹配行的开头$ 匹配行的结尾\ 转义字符,用于匹配特殊字符[] 匹配方括号内的任意一个字符() 用于捕获和分组匹配内容正则表达式常见用法1. 字符串匹配我们可以使用正则表达式来判断一个字符串是否符合某种模式。
例如,我们可以使用正则表达式\d{4}-\d{2}-\d{2}来判断一个字符串是否为合法的日期格式(例如2022-01-01)。
2. 字符串查找正则表达式可以帮助我们在一个字符串中查找符合某种模式的子串。
例如,我们可以使用正则表达式\d{3}-\d{4}-\d{4}在一个字符串中查找所有的电话号码。
3. 字符串替换正则表达式还可以用于字符串的替换操作。
例如,我们可以使用正则表达式\d{4}-\d{2}-\d{2}将一个字符串中的日期格式替换为另一种格式。
4. 字符串分割正则表达式还可以用于字符串的分割操作。
例如,我们可以使用正则表达式\s+将一个字符串按照空格进行分割。
注意事项在使用DolphinDB的正则表达式时,需要注意以下几点:1. 避免贪婪匹配默认情况下,正则表达式是贪婪匹配的,即尽可能多地匹配字符。
如果需要进行非贪婪匹配,可以在量词后面加上?。
例如,正则表达式\d+?可以匹配尽可能少的数字。
- 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 字符串也使用 '\\' 表示字符 '\'简而言之,为了匹配反斜杠这个字符,我们需要在字符串中使用四个反斜杠才行。