超级详细的Python正则表达式操作指南(重用),

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

python 正则表达式 教程_python正则表达式空格_python 优化 正则表达式

Python从1.5版开始添加了re模块,该模块提供了Perl样式的正则表达式模式. 在Python 1.5之前,通过regex模块提供了Emecs样式的模式. Emacs样式模式可读性较差,功能也不那么强大,因此在编写新代码时尽量不要使用regex模块. 当然,您仍然可以在旧代码中找到它.

从本质上讲python 优化 正则表达式,正则表达式(RE)是小型的,高度化的编程语言(在Python中),嵌入在Python中并通过re模块实现. 使用这种小语言,您可以为要匹配的相应字符串集指定规则. 字符串集可能包含英文句子,电子邮件地址,TeX命令或您想要获取的任何内容. 然后,您可以问诸如“此字符串是否与模式匹配?”之类的问题. 或“字符串的任何部分与模式匹配吗?”. 您还可以使用RE以各种方式修改或拆分字符串.

正则表达式模式被编译为一系列字节码,然后由用C编写的匹配引擎执行. 在高级用法中,可能有必要特别注意引擎如何执行给定的RE以及如何编写RE. RE以特定方式使生成的字节码运行更快. 本文不涉及优化,因为这需要您掌握匹配引擎的内部机制.

正则表达式语言相对较小且受限制(功能受限),因此并非所有的字符串处理都可以使用正则表达式来完成. 当然,某些任务可以使用正则表达式来完成,但是最终表达式将变得非常复杂. 在这种情况下,编写Python代码进行处理可能会更好. 尽管Python代码比复杂的正则表达式慢,但更易于理解.

简单模式

我们将从最简单的正则表达式学习开始. Python学习交流-719-139-688由于字符串操作中经常使用正则表达式,因此我们从最常见的任务开始: 字符匹配.

字符匹配

大多数字母和字符通常相互匹配. 例如,正则表达式test将与字符串“ test”完全匹配. (您也可以使用不区分大小写的模式,这还将使此RE匹配“ Test”或“ TEST”;稍后将进行更多说明. )

当然会有这个规则的例外;一些字符是特殊字符,它们不匹配自己,但是会指示它们应该匹配特殊字符,否则它们将影响RE其他部分的重复次数. 本文花了很多时间讨论各种元字符及其功能.

python正则表达式空格_python 正则表达式 教程_python 优化 正则表达式

有完整的元字符列表;它们的含义将在本指南的其余部分中讨论.

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

我们检查的第一个元字符是“ [”和“]”. 它们通常用于指定字符类别,所谓的字符类别是您要匹配的字符集. 可以单独列出字符,也可以列出两个给定的字符,并用“-”号分隔以表示字符间隔. 例如,[abc]将匹配“ a”,“ b”或“ c”中的任何字符;间隔[a-c]也可以用来表示相同的字符集,其效果与前者相同. 如果只想匹配小写字母,则RE应该写为[a-z].

该元字符在类别中不起作用. 例如,[akm $]将匹配任何字符“ a”,“ k”,“ m”或“ $”; “ $”通常用作元字符,但在字符类别中,其特征被删除,恢复为普通字符.

您可以使用补码来匹配不在此范围内的字符. 想法是使用“ ^”作为类别的第一个字符;其他地方的“ ^”将仅匹配“ ^”字符本身. 例如,[^ 5]将匹配“ 5”以外的任何字符.

也许最重要的元字符是反斜线“”“. 作为Python中的字符串字母,可以在反斜杠后添加不同的字符以表示不同的特殊含义. 它也可以用于取消所有元字符,因此您可以例如,如果您需要匹配字符“ [”或“”“,则可以在它们前面使用反斜杠来取消其特殊含义: ” [或“”.

以“”开头的一些特殊字符表示的预定义字符集通常非常有用,例如数字集,字母集或其他非空字符集. 以下是可用的预设特殊字符:

比较详细Python正则表达式操作指南(re使用),一

此类特殊字符可以包含在字符类中. 例如,[“ s,. ]字符类将匹配任何空白字符或”,“或”. “.

python 正则表达式 教程_python正则表达式空格_python 优化 正则表达式

此部分中的最后一个元字符是..它匹配除换行符之外的任何字符. 在备用模式下(例如DOTALL),它甚至可以匹配换行符. “. ”通常用于您要匹配“任何字符”的地方.

重复

正则表达式可以做的第一件事就是匹配一个可变长度的字符集,这是其他可以作用于字符串的方法所不能做到的. 但是,如果这是正则表达式的唯一附加功能,那么它们就不是很好. 它们的另一个功能是,您可以指定正则表达式一部分的重复次数.

我们讨论的第一个重复函数的元字符是*. *与字母字符“ *”不匹配;而是指定前一个字符可以匹配零次或多次,而不是一次.

例如,ca * t将匹配“ ct”(0个“ a”字符),“ cat”(1个“ a”),“ caaat”(3个“ a”字符)等. RE引擎具有各种内部整数限制,以防止C匹配超过2亿个“ a”字符;您可能没有足够的内存来构建这么大的字符串,因此它不会累积到该限制.

类似*的重复是“贪婪”;重复RE时,匹配引擎将尝试重复尽可能多的次数. 如果模式的后半部分不匹配,则匹配引擎将返回并尝试较小的重复次数.

分步示例可以使它更清晰. 让我们考虑表达式a [bcd] * b. 它与字母“ a”,来自[bcd]类的零个或多个字母匹配,并以“ b”结尾. 现在考虑一下此RE如何与字符串“ abcbd”匹配.

比较详细Python正则表达式操作指南(re使用),一

现在可以到达RE的结尾,它匹配“ abcb”. 这证明了匹配引擎将在一开始就尽最大努力进行匹配. 如果没有匹配项,它将逐渐返回并重复尝试其余的RE. 直到它返回尝试将[bcd]匹配为零次为止,如果随后失败,则引擎将认为该字符串根本无法匹配RE.

python 正则表达式 教程_python正则表达式空格_python 优化 正则表达式

另一个重复的元字符是+,表示匹配一次或多次. 请注意*和+之间的区别; *匹配零次或多次,因此它根本不会出现,并且+至少需要出现一次. 使用同一示例,ca + t可以匹配“ cat”(1个“ a”),“ caaat”(3个“ a”),但不能匹配“ ct”.

还有更多的限定词. 问号?匹配一次或零次;您可以将其视为识别某些内容的可选内容. 例如: home-? Brew匹配“自制”或“自制”.

最复杂的重复限定符为{m,n},其中m和n是十进制整数. 限定词意味着至少有m个重复,最多n个重复. 例如,a / {1,3} b将匹配“ a / b”,“ a // b”和“ a /// b”. 它不能匹配“ ab”,因为没有斜杠,也不能匹配“ a //// b”,因为有四个斜杠.

您可以忽略m或n;因为将为缺失值假定一个合理的值. 忽略m将认为下边界为0,而忽略n将导致上边界为无穷大,实际上是我们前面提到的2万亿,但这可能与无穷大相同.

细心的读者可能会注意到,可以用这种方式来表达其他三个限定词. {0,}等同于*,{1,}等同于+,{0,1}等同于?如果可能的话,最好使用*,+或?. 非常简单,因为它们更短且更易于理解.

使用正则表达式

现在我们已经看到了一些简单的正则表达式,那么我们如何在Python中实际使用它们呢? re模块提供了一个正则表达式引擎接口,使您可以将RE编译为对象并使用它们进行匹配.

编译正则表达式

正则表达式被编译到RegexObject实例中,可以为不同的操作提供方法,例如模式匹配搜索或字符串替换.

python正则表达式空格_python 正则表达式 教程_python 优化 正则表达式

比较详细Python正则表达式操作指南(re使用),一

re.compile()还接受可选的标志参数,通常用于实现不同的特殊功能和语法更改. 稍后我们将回顾所有可用的设置,但现在仅举一个例子:

比较详细Python正则表达式操作指南(re使用),一

RE作为字符串发送到re.compile(). RE被视为字符串,因为正则表达式不是Python语言的核心部分,也不为其创建特定的语法. (该应用程序根本不需要RE,因此无需包含它们即可使语言描述膨胀. )re模块仅以C扩展模块的形式包含在Python中,就像套接字或zlib模块一样.

使用RE作为字符串来确保Python语言的简单性,但这带来的麻烦之一就像下一节的标题一样.

反斜杠的麻烦

在早期的法规中,正则表达式使用反斜杠字符(“”“)表示特殊格式或允许使用特殊字符而无需调用其特殊用法. 这与Python中的字符串相同相同. 造成冲突.

让我们举例说明python 优化 正则表达式,您要编写一个RE以匹配字符串“” section“,该字符串可以在LATEX文件中找到. 为了判断程序代码,请首先编写要匹配的字符串. ,您需要在所有反斜杠和元字符之前添加一个反斜杠以取消其特殊含义.

比较详细Python正则表达式操作指南(re使用),一

简而言之,为了匹配反斜杠,您必须在RE字符串中写入“ \”,因为正则表达式必须为“ \”,并且每个反斜杠都是Python字符串字母的约定. 必须表示为“ \”. RE中反斜杠的重复性质会导致大量重复的反斜杠,并且结果字符串很难理解.

解决方案是将Python的原始字符串表示形式用于正则表达式;在字符串前面添加“ r”反斜杠将不会以任何特殊方式处理,因此r“”包含“”和“两个字符“ n”,而“”是一个字符,表示换行符. 通常用Python代码中的原始字符串表示.


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

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

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