Location:Home > Turbo catalogue > Audi turbos > 比较详细Python正则表达式操作指南(re使用)(3)

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

Time:2018-01-13 01:15Turbochargers information Click:

比较 详细 使用 Python 正则


让我们举例说明,你想写一个 RE 以匹配字符串 ""section",可能是在一个 LATEX 文件查找。为了要在程序代码中判断,首先要写出想要匹配的字符串。接下来你需要在所有反斜杠和元字符前加反斜杠来取消其特殊意义。

字符阶段

\section要匹配的字符串

\\section为 re.compile 取消反斜杠的特殊意义

"\\\\section"为字符串取消反斜杠


简单地说,为了匹配一个反斜杠,不得不在 RE 字符串中写 '\\',因为正则表达式中必须是 "\\",而每个反斜杠按 Python 字符串字母表示的常规必须表示成 "\\"。在 REs 中反斜杠的这个重复特性会导致大量重复的反斜杠,而且所生成的字符串也很难懂。


解决的办法就是为正则表达式使用 Python 的 raw 字符串表示;在字符串前加个 "r" 反斜杠就不会被任何特殊方式处理,所以 r"\n" 就是包含"\" 和 "n" 的两个字符,而 "\n" 则是一个字符,表示一个换行。正则表达式通常在 Python 代码中都是用这种 raw 字符串表示。

常规字符串Raw 字符串

"ab*"r"ab*"

"\\\\section"r"\\section"

"\\w+\\s+\\1"r"\w+\s+\1"

执行匹配

一旦你有了已经编译了的正则表达式的对象,你要用它做什么呢?`RegexObject` 实例有一些方法和属性。这里只显示了最重要的几个,如果要看完整的列表请查阅 Python Library Reference

方法/属性作用

match()决定 RE 是否在字符串刚开始的位置匹配

search()扫描字符串,找到这个 RE 匹配的位置

findall()找到 RE 匹配的所有子串,并把它们作为一个列表返回

finditer()找到 RE 匹配的所有子串,并把它们作为一个迭代器返回


如果没有匹配到的话,match() 和 search() 将返回 None。如果成功的话,就会返回一个 `MatchObject` 实例,其中有这次匹配的信息:它是从哪里开始和结束,它所匹配的子串等等。

你可以用采用人机对话并用 re 模块实验的方式来学习它。如果你有 Tkinter 的话,你也许可以考虑参考一下 Tools/scripts/redemo.py,一个包含在 Python 发行版里的示范程序。

首先,运行 Python 解释器,导入 re 模块并编译一个 RE:

#!python

Python 2.2.2 (#1, Feb 10 2003, 12:57:01)

>>> import re

>>> p = re.compile('[a-z]+')

>>> p

<_sre.SRE_Pattern object at 80c3c28>


现在,你可以试着用 RE 的 [a-z]+ 去匹配不同的字符串。一个空字符串将根本不能匹配,因为 + 的意思是 “一个或更多的重复次数”。 在这种情况下 match() 将返回 None,因为它使解释器没有输出。你可以明确地打印出 match() 的结果来弄清这一点。

#!python

>>> p.match("")

>>> print p.match("")

None

现在,让我们试着用它来匹配一个字符串,如 "tempo"。这时,match() 将返回一个 MatchObject。因此你可以将结果保存在变量里以便后面使用。


Copyright infringement? Click Here!