b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

如何在Python3中优雅使用正则表达式(详细说明)

电脑杂谈  发布时间:2020-04-20 14:17:39  来源:网络整理

python 优化 正则表达式_python正则表达式教程_python perl 正则表达式

正则表达式简介

正则表达式(也称为RE或regexe或regex模式)本质上是一种很小的高度化的编程语言. 它嵌入在Python中,并通过re模块提供给程序员. 使用正则表达式,您需要指定一些规则来描述要匹配的字符串集.

正则表达式模式被编译为一系列字节码,然后由用C语言编写的匹配引擎执行. 对于高级用法,您可能需要更加注意匹配引擎如何执行给定的RE,并以某种方式写入RE以产生可以更快运行的字节码. 本文暂时将不解释优化的详细信息,因为它需要您对匹配引擎的内部机制有一个很好的了解. 但是本文中的示例都是符合标准的正则表达式语法.

正则表达式语言相对较小且受限制,因此并非所有可能的字符串处理任务都可以使用正则表达式来完成. 使用正则表达式也可以完成一些特殊任务,但是表达式将变得非常复杂. 在这种情况下python 优化 正则表达式,编写自己的Python代码可能会更好. 尽管Python代码比复杂的正则表达式要慢,但可能更易于理解.

字符匹配

大多数字母和字符都可以匹配. 例如,正则表达式bilibili将与字符串“ bilibili”完全匹配. 同时,我们可以使用不区分大小写的方法,以便匹配“ BILIBILI”.

元字符

有一些我们称为元字符的特殊字符. 他们不匹配自己. 它们定义了字符类,子组匹配和模式重复时间. 以下是元字符的完整列表:

. ^ $ * +? {} [] \ | ()

python正则表达式教程_python perl 正则表达式_python 优化 正则表达式

(1)首先引入“. ”

它匹配换行符以外的任何字符. 如果设置了re.DOTALL标志,它将匹配包括换行符在内的所有字符. 示例如下所示.

使用“. ”的演示元字符

(2)让我们介绍“ ^”

当我们需要匹配方括号中未列出的所有其他字符时,通常我们采用在类的开头添加插入符号^的方法,例如[^ 8]将匹配'8'以外的任何其他字符字符. 示例如下所示.

使用“ ^”元字符的演示

(3)我们介绍“ $”

$可用于匹配输入字符串的结束位置. 整个字符串的结尾字符,但是如果最后一个是换行符,则可以根据倒数第二个字符进行匹配,当然也可以根据换行符直接进行匹配. 需要注意的一件事是,元字符不会触发方括号中的“特殊功能”. 在角色类中,它们仅匹配自己. 例如,[CZY $]将匹配任何字符'C','Z','Y'或'$','$'是一个元字符,但在方括号中并不表示特殊含义,它仅匹配' $'角色本身.

python正则表达式教程_python perl 正则表达式_python 优化 正则表达式

使用“ $”元字符1的演示

使用“ $”元字符2的演示

(D)接下来,引入“ *”

“ *”可以轻松匹配不同的字符集,但是Python字符串的现有方法不能. 但是,别无选择,正则表达式还有另一个强大的功能,那就是,您可以指定RE部分重复的次数.

让我们看一下*元字符. 当然,它与'*'字符本身不匹配,用于指定前一个字符匹配零次或多次.

例如,ca * t将匹配ct(0个字符a),cat(1个字符a),caaat(3个字符a),依此类推. 应该注意的是,由于C语言int类型的大小的内部限制,正则表达式引擎会将重复字符'a'的数量限制为不超过20亿;但是,通常我们在工作中不会使用太多. 数据.

使用“ *”元字符的演示

python perl 正则表达式_python正则表达式教程_python 优化 正则表达式

(5)然后输入“ +”

该元字符为+,可用于指定前一个字符匹配一次或多次. 要特别注意*和+之间的差异: *匹配零次或多次,因此重复的内容可能根本不会出现; +需要至少出现一次. 例如,ca + t将匹配cat和caaat,但不匹配ct.

使用“ +”元字符的演示

(六)让我们介绍“ {}”

最灵活的应该是元字符{m,n}(m和n是十进制整数). 可以使用它来表达上面提到的几个元字符. 其含义是,前一个字符必须在m次和n次之间匹配. 例如,a / {1,3} b将匹配a / b,a // b和a /// b. 但是它不会匹配ab;它与//// b不匹配.

我们可以省略m或n,在这种情况下,引擎将取一个合理的值. 省略m将被解释为0的下限;省略n将被解释为无穷大. 例如,{,n}等效于{0,n};如果是{m,}等效于{m,+ infinity};如果是{n},它将重复前一个字符n次.

实际上,*,+和?可以替换为{m,n}. {0,}与*相同; {1,}与+相同; {0,1}等于吗?但是我们仍然尝试使用*,+和?,因为这些字符更短且更易于阅读.

使用“ {}”元字符的演示

python正则表达式教程_python 优化 正则表达式_python perl 正则表达式

(7)让我们介绍“ []”

它可以指定一个字符类来存储您需要匹配的字符集. 可以单独列出要匹配的字符,或者可以通过两个字符和一个交叉键来指定匹配范围. 例如,[abc]将匹配字符apython 优化 正则表达式,b或c; [a-c]可以实现相同的功能. 后者使用范围来表示与前者相同的字符集. 如果您只想匹配小写字母,则您的RE可以写为[a-z].

使用“ []”元字符的演示

(八),我们介绍“ \”

最重要的元字符可能是反斜杠\. 与Python的字符串规则一样,如果一个元字符后紧跟一个反斜杠,则不会触发该元字符的“特殊功能”. 例如,如果需要匹配符号[或\,则可以在它们前面添加反斜杠以消除其特殊功能: \ [,\\.

反斜杠后跟一些字符也可以具有特殊含义,例如十进制数字,所有字母或非空字符集.

示例: \ w匹配任何字符. 如果正则表达式以字节表示,则等效于字符类[a-zA-Z0-9_];如果正则表达式是字符串,则\ w将匹配Unicode中标记为字母的所有字符. 您可以通过在编译正则表达式时提供re.ASCII来进一步限制\ w的定义.

以下列出了由反斜杠和字符形成的一些特殊含义:

特殊字符含义\ d匹配任何十进制数字;等效于类[0-9] \ D与\ d相反,匹配任何非十进制数字字符;等效于类[^ 0-9] \ s匹配任何空白字符(包括空格,换行符,制表符等);等效于类[\ t \ n \ r \ f \ v] \ S与\ s相反,并且匹配任何非空白字符;等效于类[^ \ t \ n \ r \ f \ v] \ w匹配任何字符,\ W与\ w \ b相反,匹配单词的开头或结尾\ B与\ b相反.

它们可以包含在字符类中,并且具有相同的特殊含义. 例如,[\ s,. ]是一个字符类,它将匹配任何空白字符(/ s的特殊含义),“,”或“. ”.

(9)让我们介绍“ |”

“ |”单独用于仅匹配左侧和右侧的表达式,并且可以与()结合使用. 让我解释一下“ |”的用法以匹配的IP地址为例.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-182472-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...