3.2.2 正则表达式的功能
在本模块内主要包括函数、常量和异常。有一些函数是为简单使用,而减少一些特征。在大多数的正规的应用程序里,都是采用编译方式来使用正则表达式。 re.compile(pattern,flags=0) 编译一个正则表达式,并生成一个正则表达式对象,而这个对象可以使用方法match()和search()来进行匹配。编译正则表达式的选项,可以通过flags来设置,这些参数可以通过或(|)的方式来进行组合。 这个编译过程如下: prog=re.compile(pattern) result=prog.match(string) 与下面处理过程相同: result=re.match(pattern,string) 不过,re.compile()的方式在多次重复使用这个正则表达式时是有很大优势,因为会大大减少正则表达式的重复编译过程。值得注意是:最新版本的Python会把re.compile()最近几次编译的对象缓存起来,如果只是使用很少正则表达式,不用担心重复编译的问题。 例子: print('re.compile'); prog=re.compile(r'caid') result=prog.match(r'cai7caimousecaicai8') ifresult: print(result.group(0)) 输出结果如下: re.compile cai7 re.A re.ASCII 指定w,W,b,B,d,D,s和S使用ASCII模式之下,而不使用在UNICODE的模式。不过它只有UNICODE里使用,而在8位的模式之下忽略这个标志。为了兼容以前版本的正则表达式,re.U标志还在使用,由于在Python3.0以后都默认使用UNICODE的方式,所以re.U是多余的。 例子: print('re.A,re.ASCII') prog=re.compile('深圳软件中心d+',re.A) result=prog.match('深圳软件中心007用软件改变世界98') ifresult: print(result.group(0)) 输出结果如下: re.A,re.ASCII 深圳软件中心007 re.DEBUG 详细显示编译正则表达式的信息。 例子: print('re.DEBUG') prog=re.compile('深圳软件中心d+',re.DEBUG) result=prog.match('深圳软件中心007用软件改变世界98') ifresult: print(result.group(0)) 输出结果如下: re.DEBUG literal28145 literal22323 literal36719 literal20214 literal20013 literal24515 max_repeat12147483647 in categorycategory_digit 深圳软件中心007 re.I re.IGNORECASE 忽略大小写字母区别。会把[A-Z]集合字符转换为小写字母再来匹配。如果UNICODE的字母是不受影响的。 例子: print('re.I,re.IGNORECASE') prog=re.compile('myCard+',re.IGNORECASE) result=prog.match('mycar007用软件改变世界98') ifresult: print(result.group(0)) 结果输出如下: re.I,re.IGNORECASE mycar007 re.L re.LOCALE 让w,W,b,B,s和S依赖不同本地系统而改变定义范围。由于不同系统差异,导致使用这个特性会比较不可靠,推荐使用UNICODE的方式来消除这方面的差异。 例子: print('re.L,re.LOCALE') prog=re.compile('myCard+',re.I|re.L) result=prog.match('mycar007用软件改变世界98') ifresult: print(result.group(0)) 结果输出如下: re.L,re.LOCALE mycar007 re.M re.MULTILINE 指定多行模式匹配。当指定为此标志时,‘^’表示匹配字符串开头和所有换行符后面的字符串的开头。同样‘$’表示字符串结尾和所有换行符前的结尾。 例子: print('re.M,re.MULTILINE') result=re.findall('^mycar','mycar007nmycar008n',re.M) ifresult: print(result) result=re.findall('^mycar','mycar007nmycar008n') ifresult: print(result) 结果输出如下: re.M,re.MULTILINE ['mycar','mycar'] ['mycar'] re.S re.DOTALL 点号‘.’是否表示换行符的标志。当设置时,包括表示换行符,否则不包括。 例子: print('re.S,re.DOTALL') result=re.findall('mycard+.',re.S) ifresult: print(result) result=re.findall('mycard+.','mycar007nmycar008n') ifresult: print(result) 结果输出如下: re.S,re.DOTALL ['mycar007n','mycar008n'] ['mycar007','mycar008'] re.X re.VERBOSE 这个标志主要用来给正则表达式进行排版和注释使用。当有这个标志时,正则表达式中的换行符会忽略,#号当作注释的开始。这样方式可以提高正则表达式的阅读性,但功能并没有改变。 例子: print('re.X,re.VERBOSE') result=re.findall(r"""d+#theintegralpart .#thedecimalpoint d*#somefractionaldigits""", '007.008nmycar008n',re.X) ifresult: print(result) result=re.findall(r"d+.d*",'007.008nmycar008n') ifresult: print(result) 结果输出如下: re.X,re.VERBOSE ['007.008'] ['007.008'] 蔡军生 QQ:9073204 深圳 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |