使用方法
import re
string = 'ni hao, wu bo tong xue'
pattern = r'w.+?'
repl = r'zhu'
# 1.
res = re.sub(pattern, repl, string)
print res
# 2.
c = re.compile(pattern)
res = c.sub(repl, string)
print(res)
'ni hao, zhu bo tong xue'
方法定义
# re.py
def sub(pattern, repl, string, count=0, flags=0):
return _compile(pattern, flags).sub(repl, string, count)
def compile(pattern, flags=0):
return _compile(pattern, flags)
#typing.pyi
class Pattern(Generic[AnyStr]):
@overload
def sub(self, repl: _AnyStr2, string: _AnyStr2,
count: int = ...) -> _AnyStr2: ...
由此可见,两者等价, 至于sub的实现,有没有大佬指教下...
高级用法
pattern,表示正则中的模式字符串;
反斜杠加数字(\N),则对应着匹配的组(matched group)
repl可以是字符串,也可以是可调用的函数;
如果是字符串,则会处理其中的反斜杠转义符。
如果它是可调用的函数,则传递匹配对象,并且必须返回要使用的替换字符串。
flags --正则表达式修饰符
控制匹配的模式。如 re.I 使匹配对大小写不敏感
import re
string = 'Today is Monday, next day is Tuesday'
pattern = r'[a-zA-Z]+day'
human_day = {
"monday": "星期一",
"tuesday": "星期二",
"wednesday": "星期三",
"thursday": "星期四",
"friday": "星期五",
"saturday": "星期六",
"sunday": "星期日",
}
def replacement(match):
str = match.group(0).lower()
# match代表当前匹配的对象,可以包含多个group
# 若只包含一个group,group(0)和group(1)意义相同
val = human_day.get(str)
return val if val else str
res = re.sub(pattern, replacement, string)
# 等价于 res = re.sub(r'[a-z]+day', replacement, string, flags=re.I)
print(res)
today is 星期一, next day is 星期二