正则表达式
正则表达式其实内容不多,这是python一个比较人性化的地方,虽然有".","*","?",但是他们单独使用的机会很少,主要的使用是捏合在一起:(.*?) 首先要启动正则表达式,需要先import re。这样才能启动re下面的内部程序。 (.*?)是一个完全精确的算法,她不像“.*”那样贪心,甚至比“.*?”还不贪心。(.*?)使用的格式如下: re.findall("定位符1(.*?)定位符2",需要检查的字段) 然后就会显示出()内的内容。 for instance: import re s="sdfxxhelloxxfsdfxxworldxxasdf" d=re.findall("xx(.*?)xx",s) print(d) 以上的程序显示结果是['hello','world'],注意,这是一个列表!即d是可以查序的,d[0]='hello'。 如果s改变一下变成以下的方式: import re s="""sdfxxhello xxfsdfxxworldxxasdf""" d=re.findall("xx(.*?)xx",s) print(d) 这样的输出结果是["fsdf"],而不是上一个结果。这是因为“.在默认的情况下不可以匹配转行符/n”。s现在是两段话,那么re.findall会先找第一段,如果在第一段找到了符合要求的会输出,如果没有找到,那么开始在第二段找,但是找归找,却是不继承第一段的内容。所以满足xx~xx之间要求的只有xxfsdfxx这一段,故而输出["fsdf"]。虽然紧跟着后面还有一个xxworldxx,但是由于前面的xx已经被上一段用走了,所以无法再选择了。 如果d=re.findall("xx(.*?)xx",s,re.S),这样的话输出是['hellon','world']。re.S的意思是re模块里的S命令。 连用(.*?): import re s="89A000Boo2junkiA111Boooo2nium" d=re.findall("A(.*?)B(.*?)2",s) print(d) 这样的输出结果是[('000','oo'),('111','oooo')],d[0]=('000',len(d)=2。 匹配纯数字: import re s="asdf12345hjkl" f=re.findall("(d+)",s) print(f) 此时的输出结果是12345,f=re.findall("(d+)",s)的效果等于f=re.findall("asdf(.*?)hjkl",s)。但是要注意(d+)只能返回纯数字,如果s="asdf12a34w5hjkl"的话,那么再用这条语句,返回的是["12","34","5"]。 search命令 import re s="asdfxxIxx231xxLOVExxDFd" f=re.search("xx(.*?)xx213xx(.*?)xx",s).group(1) print(f) 此时的结果是I,若后面改成group(2),那么输出结果是LOVE。可见后面的group号码是对应里面的(.*?)的值,而一旦group号码超出了(.*?)的个数,那么就会红字报错,Index Error.而如果不加group,那么会提示<_sre.SRE_Match object; span=(4,20),match='xxIxx123xxLOVExx'>。 sub命令 import re s="123RRRRR123" f=re.sub("123(.*?)123”,“12345”,s) print(f) 此时输出的结果是12345,可见如果有满足语句选择的量,那么会直接返回sub语句后面的内容。如果没有满足语句选择的量,那么返回的是s。sub主要是一个替换的作用,而无法替换的时候,就将原值返回。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |