正则表达式使用系列(五)finditer、split、sub 方法

finditer 方法

搜索所有匹配的结果。返回一个迭代器,可顺序访问每一个匹配的结果(Match 对象)

范例

	# -*- coding: utf-8 -*-
import re
pattern = re.compile(r'\d+')
result_iter1 = pattern.finditer('hello 123456 789')
result_iter2 = pattern.finditer('one1two2three3four4', 0, 10)
print(type(result_iter1))
print(type(result_iter2))
print('result1...')
for m1 in result_iter1: # m1 是 Match 对象
 print('matching string: {}, position: {}'.format(m1.group(), m1.span()))
print('result2...')
for m2 in result_iter2:
 print('matching string: {}, position: {}'.format(m2.group(), m2.span()))

正则表达式使用系列(五)finditer、split、sub 方法

split 方法

按照能够匹配的子串将字符串分割后返回列表
split(string[, maxsplit])
maxsplit 用于指定最大分割次数,不指定将全部分割。

范例

import re
p = re.compile(r'[\s,;]+')
print(p.split('a,b;; c d'))

正则表达式使用系列(五)finditer、split、sub 方法

sub 方法

方法用于替换。
sub(repl, string[, count])
epl 可以是字符串也可以是一个函数:
如果 repl 是字符串,则会使用 repl 去替换字符串每一个匹配的子串
如果 repl 是函数,方法只接受一个参数(Match 对象),并返回一个字符串用于替换。
count 用于指定最多替换次数,不指定时全部替换。

范例

import re
p = re.compile(r'(\w+) (\w+)') # \w = [A-Za-z0-9]
s = 'hello 123, hello 456'
print(p.sub(r'hello world', s)) # 使用 'hello world' 替换 'hello 123' 和
'hello 456'
print(p.sub(r'\2 \1', s)) # 引用分组
def func(m):
 return 'hi' + ' ' + m.group(2)
print p.sub(func, s)
print p.sub(func, s, 1) # 最多替换一次

epl 参数是字符串
正则表达式使用系列(五)finditer、split、sub 方法
epl 参数是函数
正则表达式使用系列(五)finditer、split、sub 方法

正则表达式学习传送门:

正则表达式使用系列(一)生成 Pattern 对象
正则表达式使用系列(二)match 方法
正则表达式使用系列(三)search 方法
正则表达式使用系列(四)findall 方法