Python的re模块就是其正则表达式模块,如果使用的话需要导入
import re
最简单的是字符串包含的一些类似于函数
s = '100 NORTH MAIN ROAD' s.replace('ROAD', 'RD.') '100 NORTH MAIN RD.'
这样的替换方法不太智能 可能把每个单词中包含ROAD的都给替换了 这就不是我们的本意了
import re re.sub('ROAD$', 'RD.', s)
正则表达式的替换方式能够“聪明”查找单词 完成任务
创建表达式实例
p = re.compile('[a-z]+')
编译了一个‘RegexObject’的实例
接下来就可以使用match函数来检测字符串是否符合正则表达
print p.match("abc")
如果匹配的话,match函数返回一个‘MatchObject’实例 通过一些操作可以得到一些信息
方法/属性 | 作用 |
group() | 返回被 RE 匹配的字符串 |
start() | 返回匹配开始的位置 |
end() | 返回匹配结束的位置 |
span() | 返回一个元组包含匹配 (开始,结束) 的位置 |
match()函数和search()函数用法的区别
match()函数用在检测被检测的字符串是否符合我们的要求,例如
p = re.compile('a\w*') m = p.match("abc") print m.span() (0, 3) m2 = p.match("babc") print m2 none m3 = p.search("babc") print m3.span() (1,4)
如果使用search()函数的话,python能够找出字符串中合适的那一部分
findall函数创建一个在被检查字符串内符合要求的子字符串列表
print p.findall("sd12fg23cvb45") ['sd', 'fg', 'cvb']
标志 | 含义 |
DOTALL, S | 使 . 匹配包括换行在内的所有字符 |
IGNORECASE, I | 使匹配对大小写不敏感 |
LOCALE, L | 做本地化识别(locale-aware)匹配 |
MULTILINE, M | 多行匹配,影响 ^ 和 $ |
VERBOSE, X | 能够使用 REs 的 verbose 状态,使之被组织得更清晰易懂 |
X
VERBOSE
该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。当该标志被指定时,在 RE 字符串中的空白符被忽略,除非该空白符在字符类中或在反斜杠之后;这可以让你更清晰地组织和缩进 RE。它也可以允许你将注释写入 RE,这些注释会被引擎忽略;注释用 "#"号 来标识,不过该符号不能在字符串或反斜杠之后。
#!python charref = re.compile(r""" &[[]] # Start of a numeric entity reference ( [0-9]+[^0-9] # Decimal form | 0[0-7]+[^0-7] # Octal form | x[0-9a-fA-F]+[^0-9a-fA-F] # Hexadecimal form ) """, re.VERBOSE)
findall()函数的陷阱
findall()函数能够返回目标字符串中匹配正则的所有子字符串列表,的确很好用,但是在使用上有一个小陷阱,那就是分组(也就是如果正则中包含有“()”的内容,例如a([\d*])b),findall()就会返回符合“()”中的内容,而不是正则匹配的内容,如果想返回所有内容 就需要把整个正则用"()"包起来。