首页 > 代码库 > python基础教程笔记-项目1-即时标记-Day4
python基础教程笔记-项目1-即时标记-Day4
今天主要看下re.sub函数和Handler类的sub函数
先看下re.sub函数
re.sub共有5个参数,不过一般写前三个就好了,即pattern,repl和string
pattern表示正则中的模式字符串,repl可以是字符串,也可以是函数。string为要进行替换的字符串
先看一段代码:
import re def Num2A(match): return 'A' a = re.sub(r'(\d+)', Num2A, 'he123he') print a a = re.sub(r'(\d+)', r'A', 'he123he') print a
执行结果:
代码分别通过函数Num2A和字符串A,将字符串hehe123hehe转化为heAhe。
当re.sub的第二个参数repl为函数时,函数的返回值就是想替换的结果。
再看下Handler的sub函数
看下面一段代码
import re class Handler: def sub_emphasis(self, match): return '<em>%s</em>' % match.group(1) def callback(self, prefix, name, *args): method = getattr(self, prefix+name, None) if callable(method): return method(*args) def sub(self, name): def substitution(match): result = self.callback('sub_', name, match) if result is None: result = match.group(0) return result return substitution a = Handler() a = re.sub(r'\*(.+?)\*', a.sub('emphasis'), r'This *is* a test') print a
执行结果为:
可以看到sub返回了一个新函数,而这个函数会被当成re.sub中的替换函数来使用。
这里书上写错了,应该是
if result is None: result = match.group(0)
不是if result isNone:match.group(0)
因为如果在对象中没找到匹配的函数,result会为None,那么为了不对string做任何修改,应只是返回原来的方法,即return match.group(0)
python基础教程笔记-项目1-即时标记-Day4
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。