python3 正则表达式(更新中)

来源:互联网 发布:月薪8000能招到java 编辑:程序博客网 时间:2024/06/05 05:10

1、特殊符号(先解释,后面会有例子)

表示 描述 re1|re2 或的关系 . 匹配任何字符(\n除外),要显示的匹配.号,需要加\| ^ 匹配字符串的开头 $ 匹配字符串的结尾 * 匹配0次或多次前面出现的正则表达式 + 匹配1次或者多次前面出现的正则表达式 ? 匹配0次或者一次(一句话,就是匹配越少越好) {N} 重复N次前面出现的正则表达式 {M,N} 匹配M~N次前面出现的正则 【abcd】 匹配集合中某一个元素 【x-y】 匹配x~y范围内任意的一个字符(如【A-Za-z】匹配大小写 【^……】 不匹配集合里的字符(切记:^【……】意义是匹配以集合元素开头的) 注意 直接使用\…的时候是在用r‘\……’情况使用的,不用r是要用\……才能使用 \d 匹配十进制数字 \w 匹配任何字母数字 \s 匹配任何空字符(\S与之相反) \N 匹配已经保存的子组 \A 和^一个意思 \Z 和$一个意思 (?=.com) 如何一个字符串跟着.com才做匹配操作 (?!.net) 如何一个字符串后面不是跟着.net才做匹配操作 (?(1)y|x) 如果一个匹配组(1)存在,就和y匹配,否则和x匹配

2、re模块函数

函数方法 描述 compile(str,flags) 预编译一个正则模式,返回正则表达式对象 match(pattern,str,flags) 从头开始按照pattern模式匹配str search(pattern,str,flags) 随意按照pattern模式查找str findall(pattern,string,flags) 查找字符串中所有非重复出现的正则表达式模式,并返回一个列表 finditer(pattern,string,flags) 与findall()一样,只是返回一个迭代器 sub(patter,repl,string,count) 使用repl替换所有正则在string中出现的位置,如果没有count就会替换所有 (?iLmsux)部分详细解释 下列属性 re.I、re.IGNORECASE 不区分大小写的匹配 re.M、re.MULTLINE 根据^和$的开始和结束来匹配

3、使用match()方法匹配字符串

>>>import re>>>m = re.match('foo','food on the table')>>>m.group()#group()返回匹配对象'foo'

4、使用search()方法查找

>>>import re>>>m = re.rearch('foo',seafood')>>>m.group()'foo'

5、匹配多个字符串

>>>bt ='bat|bet|bit'>>>m = re.match(bt,'bat')>>>m.group()'bat'

6、匹配单个字符

>>>anyend = '.end'>>>m = re.match(anyend,'bend')>>>m.group()'bend'

7、创建字符集【】

>>>m = re.match('[cr][23][dp][o2]','c3po')>>>m.group()'c3po'

8、group()和groups()区别

#一个括号代表一个组#groups返回一个元祖>>>m = re.match('(\w\w\w)-(\d\d\d)','abc-123')>>>m.group()'abc-123'>>>m.group(1)'abc'>>>m.group(2)'123'>>>m.groups()('abc','123')

9、findall查找所有的,finditer迭代

>>>re.findall(r'(th\w+)','This and that,re.I)#re.I忽略大小写,r是使用原生字符['This','that']>>>it = re.finsiter(r'th\w+)','This and that',re.I)>>> g = it.__next__()>>>g.groups()('This',)>>g.group(1)'This'>>>g = it.__next__()>>>g.groups()('that',)

10、使用sub()和subn()搜索和替换

>>>re.sub('X','Mr.Smith','attn:X',\n')'attn:Mr.Smith,\n'#subn会返回('attn:Mr.Smith,\n',1),替换了一次#\N是分组编号>>>re.sub(r'(\d{1,2})/(\d{1,2})/(\d{2}|\d{4}',... r'\2/\1/\3','2/20/91')'20/2/91'#替换的结果就是结果的第一个组变成第二个组,第二个组变成第一个

11、贪婪与不贪婪

#贪婪>>>pat = '.+\d+-\d+-\d+'>>>date = 'Thu Feb 15 17:46:04 2007::uziff@jiojf.g::1212345-6-8'>>>re.search(pat,date).group()'Thu Feb 15 17:46:04 2007::uziff@jiojf.g::1212345-6-8'#不贪婪>>>pat = '.+?\d+-\d+-\d+'......>>>re.search(pat,date).group()'1212345-6-8'