首页 > 编程笔记

Python re模块使用详解

re 模块可以执行正则表达式(regular expression)的功能。re 模块的方法如下:

1. re模块常用方法介绍

1) RegExpObject = re.compile(string [, flags])

将一个正则表达式字符串编译成一个文字表示对象。

2) MatchObject = RegExpObject.search(string [, startpos] [, endpos])

搜索匹配正则表达式的字符串。

3) MatchObject = RegExpObject.match(string [, startpos] [, endpos])

检查 string 字符串的初始字符是否匹配正则表达式。

4) MatchList = RegExpObject.findall(string)

搜索没有重复的匹配字符串。

5) StringList = RegExpObject.split((string [, maxsplit])

依照正则表达式分割字符串。

6) RegExpObject.sub(newtext, string [, count])

将 string 字符串中匹配正则表达式者,以newtext取代。

7) RegExpObject.subn(newtext, string [, count])

与 sub() 方法相同,但是会返回一个元组,元组的元素为新字符串及执行的取代次数。

8) MatchObject = re.search(pattern [, string] [, flags])

搜索匹配正则表达式的字符串。

9) MatchObject = re.match(pattern [, string] [, flags])

检查 string 字符串的初始字符,是否匹配正则表达式。

10) MatchList = re.findall(pattern, string)

搜索没有重复的匹配字符串。

11) StringList = re.split(pattern, string [, maxsplit])

搜索匹配正则表达式的字符串。依照正则表达式分割字符串。

12) re.sub(pattern, newtext, string [, count])

将 string 字符串中匹配正则表达式者,以 newtext 取代。

13) re.subn(pattern, newtext, string [, count=0])

与 sub() 方法相同,但是会返回一个元组,元组的元素为新字符串及执行的取代次数。

14)newstring = re.escape(string)

将字符串中的非英文字符删除。

2. RegExpObject常用属性

每一个RegExpObject(正则表达式对象)都有以下属性:

1) RegExpObject.flags

返回编译期间正则表达式对象的标志参数。

2) RegExpObject.groupindex

返回一个辞典集,将符号群组名称映像到群组数字。

3) RegExpObject.pattern

返回对象的原始正则表达式字符串。

3. MatchObject方法与属性

每一个 MatchObject 都有以下方法与属性,如表 1 所示:

表1:MatchObject 方法与属性
名称 说明
MatchObject.group([groupid, ...]) 当提供一个群组名称或数字列表时,Python将返回一个符合每个群组的文字组成的元组。
MatchObject.groupdict() 返回一个辞典集,内容为所有符合的次群组。
MatchObject.groups() 返回一个元组,内容为符合所有群组的文字。
MatchObject.start([group]) 返回符合群组的子字符串的第一个位置。
MatchObject.end([group]) 返回符合群组的子字符串的最后一个位置。
MatchObject.span([group]) 返回一个元组,元组的内容为MatchObject.start与MatchObject.end的值。
MatchObject.pos 返回创建时传给函数的pos值。
MatchObject.endpos 返回创建时传给函数的endpos值。
MatchObject.string 返回创建时传给函数的string值。
MatchObject.re 返回产生MatchObject实例变量的RegExpObject对象。

下面的示例是读取 D:\\python\\ch14\\14.1.html 文件,并标记 <title></title> 之间的文字。
>>> import re
>>> fileContent = open("D: \\python\\ch14\\14.1.html").read()
>>> result = re.search (r"<title>(. *?)</title>",fileContent, re.IGNORECASE)
>>>print (result.group(1) )
Example HTML file
14.1.html 文件的内容如下:
<!DOCTYPE html>
<html>
<head>
    <title>Example HTML file</title>
</head>
<body>
    <h1 style="text-align: center">
选择你要连接的网站
    </h1>
<ul>
    <li>http://www.python.org</li>
    <li>http://www.iso.ch</li>
    <li>http://www.w3.org</li>
    <li>http://www.midi .org</li>
    <li>http://www.mpeg.org</li>
</ul>
</body>
< /html>
下面的示例将 14.1.html 文件内 <li> 与 </li> 之间的字符串转换为超级链接。
#字符串转换为超级链接
import re
#打开文件
fileContent = open("D: \\python\\ch14\\14.1.html").read ()
#设置正则表达式(regular expression) 为http: .. .的类型
pattern =re. compile (r" (http:// [\w-]+(?:\. [\w-]+)*(?:/ [\w-]*)* (?:\. [\w-]*)*)")
#寻找文件内所有匹配正则表达式的字符串
re. findall (pattern, fileContent)
#将匹配正则表达式的字符串,以超级链接类型的新字符串取代
result = re. sub (pattern, r"<a href=\1>\1</a>", fileContent)
#打开新文件
file = open("D: \ \python\ \ch14\\new.html", "w")
#写入新的HTML文件
file. write (result)
file. close ( )
产生新的文件 new.html,其内容如下:
<html>
    <head>
        <title>Example HTML file</title>
    </head>
<body>
    <h1 style="text-align:center">
选择你要连接的网站
    </h1>
<ul>
    <li><a href=http://www .python. org>http: / /www.python.org</a></li>
    <li><a href=http://www.iso.ch>http: //www.iso.ch</a></li>
    <li><a href=http://www.w3.org>http://www.w3.org</a></li>
    <li><a href=http://www.midi.org>http://www.midi.org</a></li>
    <li><a href=http://www.mpeg.org>http://www.mpeg.org</a></li>
</ul>
</body>
</html>

优秀文章