Python re模块使用详解
re 模块可以执行正则表达式(regular expression)的功能。re 模块的方法如下:
下面的示例是读取 D:\\python\\ch14\\14.1.html 文件,并标记 <title></title> 之间的文字。
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 所示:名称 | 说明 |
---|---|
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 file14.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>