下面是几种关键的正则表达式的属性以及用法总结,并不是太全,深入话题查询python文档即可
常见正则表达式属性
函数\方法 描述 compile(pattern,flags=0) 使用任何可选的标记来编译正则表达式的模式,返回一个正则表达式对象 match(pattern,string,flags=0) 尝试用于正则表达式模板匹配字符串,匹配成功返回结果,若失败则返回None search(pattern,string,flags) 尝试使用正则表达式标记匹配字符串,尝试匹配第一次符合模式的地方,并返回结果,若匹配失败,则返回None findall(pattern,string,[.flags]) 查找字符串中所有非重复的正则表达式模式,返回一个匹配列表 *finditer(pattern,string,[,flags]) 查找字符串中所有非重复正则表达式模式结果,返回是一个迭代器类型,一次产生一个结果 split(pattern,string,max=0) split函数根据正则表达式分隔字符串,分隔为列表类型,返回列表类型,max控制最大分隔次数,默认分隔所有成功匹配的模式 sub(pattern,repl,string,count) 使用repl替换正则表达式匹配成功的字符串位置,count控制最大替换次数 purge() 清除隐式编译的正则表达式模式 group(num) 返回所有匹配对象,或是编号为num的匹配子组 groups(default=None) 返回所有由匹配子组构成的元组,若没有匹配成功,则返回一个空元组 groupdict(default=None) 返回所有匹配的命名子组,以子组名作为键,若没有匹配成功,则返回空字典 re.I,re.IGNORECASE 不区分大小写匹配** re.L,re.LOCALE 根据所使用的本地语言环境通过\w、\W、\b、\B、\s、\S 实现匹配 re.M,re.MULTLINE ^和$分别匹配目标字符串中行的起始和结尾,而不是严格匹配整个字符串本身的起始和结尾 re.S、rer.DOTALL “.”(点号)通常匹配除了\n(换行符)之外的所有单个字符;该标记表示“.”(点号)能够匹配所有的字符 re.X、re.VERBOSE 通过反斜线转义,否则所有空格加上#(以及在该行中所有后续文字)都被忽略,除非在一个字符类中或者允许注释并且提高可读性
几点说明:
- purge()函数用于清理正则表达式在系统中的缓存
- 使用re.compile()可以提升性能
- 预编译比处理字符串更快
import re re.match("foo","food on the table").group() re.search("foo","seafood").group() patt = 'w\+@(\w+\.)?\w+\.com' re.match(patt, 'nobody@xxx.com').group() re.match(patt, 'nobody@www.xxx.com').group() m=re.search("\bthe","bitthe dog") m_=re.search("\Bthe","bitethe dog") print(m_.group()) s = 'This and that.' re.findall(r'(th\w+) and (th\w+)', s, re.I) re.finditer(r'(th\w+) and (th\w+)', s,re.I).next().groups() re.finditer(r'(th\w+) and (th\w+)', s, re.I).next().group(2) [g.groups() for g in re.finditer(r'(th\w+) and (th\w+)',s, re.I)] #列表推导式,注意re.I的使用 s="This and that" it=re.finditer(r'(th\w+) and (th\w+)',s,re.I) g=it.next() print(g.groups()) re.sub(r'(\d{1,2})/(\d{1,2})/(\d{2}|\d{4})',r'\2/\1/\3', '2/20/91') # Yes, Python is...'20/2/91' #使用编号子组可以调换位置 re.sub(r'(\d{1,2})/(\d{1,2})/(\d{2}|\d{4})', r'\2/\1/\3', '2/20/1991') # ... 20+ years old!'20/2/1991'
match函数匹配字符串开头的模式
可使用python原生的面向对象特性,直接调用group方法即可,省去中间步骤
search函数将指定的字符数与正则表达式模式进行匹配,并返回第一次匹配成功的结果,若失败,则返回None
match函数,只能匹配正则表达式模式与所要匹配的字符串的头处开始匹配,一旦未成功匹配返回错误
注意特殊字符集的使用以及转义字符的应用
“\B"和”\b“这两个特殊字符应该注意,\B匹配非单词边界,不限于单词边界,\b则必须匹配孤立的单词边界才可以
在正则表达式中使用原始字符r是一个好的习惯,原生字符可以避免ascii码的冲突问题以及频繁使用反斜杠\的困扰
findall函数返回所有成功匹配的一个列表,若失败,返回为空
finditer函数则返回一个迭代器,配合子组使用效率较高
re.sub函数替换源字符串中匹配的模式,re.subn会返回替换的次数
反斜杠\的作用:
- 反斜杠后边跟元字符去除特殊功能:即转义
- 反斜杠后边跟普通字符实现特殊功能:即变为特殊预定义字符
- 引用序号对应的字组所匹配的字符串:即使用匹配得到的子组元素
好啦,这就是正则表达式的几点总结和理解,希望对各位有帮助