设为首页 收藏本站
查看: 1105|回复: 0

[经验分享] python3.5里的正则表达式

[复制链接]

尚未签到

发表于 2018-8-11 14:16:09 | 显示全部楼层 |阅读模式
  正则表达式其实内容不多,这是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),这样的话输出是['hello\n', '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', 'oo'),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主要是一个替换的作用,而无法替换的时候,就将原值返回。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-550240-1-1.html 上篇帖子: 工位上的Python——简单SSH服务器小例子 下篇帖子: python文件替代fileinput模块
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表