python 中的正则详解
匹配单个的字符或者数字
匹配边界字符
匹配一定个数的字符: 假设: x,y,z表示任意的字符, m,n表示正整数
正则表达式的贪婪模式与非贪婪模式:
贪婪模式:.* .+ .? {n,}(即匹配所有能匹配到的数据,直到最后一个不符合的返回)
非贪婪模式:.*? .+? {n} {n,m}(即匹配满足正则条件的匹配项,碰到第一个不符合的便返回)
flag:
re.I(全拼:IGNORECASE): 忽略大小写(括号内是完整写法,下同)
re.M(全拼:MULTILINE): 多行模式,改变'^'和'$'的行为(参见上图)
re.S(全拼:DOTALL): 点任意匹配模式,改变'.'的行为
re.L(全拼:LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
re.U(全拼:UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
re.X(全拼:VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。
常用函数:
#返回pattern对象
res=re.compile(正则表达式[,flag]) # 配合各函数使用
result=res.match(string[, flags]) 等价于result=re.match(res,string[, flags])
result=res.search(string[, flags]) 等价于result=re.search(res,string[, flags])
result=res.split(string[, flags]) 等价于result=re.split(res,string[, flags])
result=res.findall(string[, flags]) 等价于result=re.findall(res,string[, flags])
result=res.finditer(string[, flags]) 等价于result=re.finditer(res,string[, flags])
result=res.sub(string[, flags]) 等价于result=re.sub(res,string[, flags])
result=res.subn(string[, flags]) 等价于result=re.subn(res,string[, flags])
#以下为匹配所用函数
result=re.match(pattern, string[, flags])
result=re.search(pattern, string[, flags])
search方法与match方法极其类似,区别在于match()函数只检测re是不是在string的开始位置匹配,
search()会寻找整个字符串, 查找匹配项, 返回第一个匹配项,
match()只有在开始位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回None。
result=re.split(pattern, string[, maxsplit])
按照能够匹配的子串将string分割后返回列表。maxsplit用于指定最大分割次数,不指定将全部分割。
result=re.findall(pattern, string[, flags])
返回包含所有匹配子串的列表
result=re.finditer(pattern, string[, flags])
返回一个按照子串顺序访问每一个匹配结果(Match对象,需要通过group函数来获得其匹配的子串)的迭代器。可以通过for循环来获得所有的匹配结果,
result=re.sub(pattern, repl, string[, count])
使用repl替换string中每一个匹配的子串后返回替换后的字符串。
当repl是一个字符串时,可以使用\id或\g、\g引用分组,但不能使用编号0。
当repl是一个方法时,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。
count用于指定最多替换次数,不指定时全部替换。
result=re.subn(pattern, repl, string[, count])
返回包含替换后的字符串和替换次数的元组,其他跟一样