zoukankan      html  css  js  c++  java
  • python中正则表达式的一些问题

    今天听到一句话,觉得很在理——"当你遇到一个问题,想到用正则表达式解决时,就变成了两个问题"

    这也从侧面说明了正则表达式比较难理解。下面我将用通俗易懂的方式总结一下,最近遇到的一些正则表达式的问题

    一. 贪婪匹配的"毛病"

    1. 太贪婪就"歇菜"了

    匹配模式为r".*(d*).*",在这个模式中,(d*)表示贪婪匹配,匹配前面的字符d,也就是数字0次或无数次,但是我们的字符串中,d匹配无数次的情况是不存在的(实际上对于search方法,它会找到"1",如果"11"不满足"1"匹配无数次,那么它就会选择匹配 "1" 0次,匹配0次后就直接返回了),因此,(d*)表示的是匹配前面的数字0次,既然是0次,那么返回的分组的内容应该是空字符串'',group(1)和groups()都能验证这一点,比如group(1)代表返回第1个分组的字符串,groups()返回一个包含所有小组字符串的元组,由于本例中只有一个分组,分组号为1,因此,我们可以看出得到的是空字符串''

    但是,有人又问了,为什么.group()看到的是匹配整个字符串?事实上,我们的分组——匹配前面的数字0次——是不起任何作用的,就相当于匹配模式是r".*.*",不信请看下图,结果是不是一模一样?

    举个例子,匹配模式是很爱财的朋友,我的银行余额是字符串,有一天他突然向我借钱,哥们,能不能借我很多钱?

    我问,具体多少?他说,当然是越多越好啊,呵呵,这个贪心的人。我查询账户余额,一瞅,只剩下10万了,当然选择不借给他!因此我知道他贪得无厌,我自己如果借给他10万,他会问我要20万,30万...甚至更多,所以,对于利欲熏心的朋友,我是拒绝的——最后他一分钱也没拿到,得到的是空(空字符串'')。于是,这位朋友算是看了一眼我的账户余额(search()),灰溜溜的走了

    2. "疑心重重"的贪婪

    有一天,这个朋友又来了,这次他的疑心又加重了一些,他又向我借钱,哥们,能不能借我很多钱?

    我掏出手机查了一下账户余额,上面写着大约"10万",这位朋友就是不死心,明明是不能满足他的贪心,他还死缠着我不放,非要我查清楚具体的明细给他看,而且要精确到小数点之后的几角几分,第一次,我告诉他大约10万,不能借给他,他拿到了空(空字符串''),第二次,当我查询具体明细时,上面显示"101283.88"元,我再次拒绝了他,他又拿了一次空,这就是findall()的作用,返回所有能匹配到的子串

    二. 贪婪的"顿悟"

    1. "请把贪婪交给别人"

    我的朋友在多次借钱无果的情况下,经过我苦口婆心的劝说,终于有点醒悟了,他打算洗心革面,做一个清心寡欲的人

    有一天,他突然来找我,哥们,能不能借我点钱,两位数的都成

    我一听,妈呀,这改变颇大,得了,借他99块钱还是没问题的,正要掏出99元时,他突然拦住我,表示要看我的账户余额

    惊出一身冷汗,但还是抱着信任他的态度,把手机给他,他看了账户余额,"101283.88"元,缓缓地说道,你能借我8毛8吗?

    当然可以——我松了一口气,有点怀疑的望着他,对了,你的贪婪哪里去了?

    他不假思索的说,我把贪婪给了别人——我们贪婪家族,辈分排在我前面的那个".*",有了他,我可以不背负贪婪的恶名,我只会找到最后面的两位数,对你的余额来说,应该是最少的


    2. 非贪婪——"大家都不贪了,才能实现互惠"

    有一天,我的朋友开心的跑来找我,说他的前辈也洗心革面了,开始慢慢习惯清贫、习惯满足

    我知道,这是我朋友的功劳。当他得到欲望的危害后,他也向布道师一样向前辈们传递这种思想

    他的前辈就接收了他的洗礼,并且还刻意在帽子上画了一个"?"的标记,那是他独有的限制自我的符号

    当然,这次朋友也是来向我借钱的,哥们,能不能给我借点钱,两位数的都行,就像上次的语气一样

    我这时卡里还有"199.88"元,为什么只剩下这么点?是因为最近去炒股了

    于是,我拿出99元,最大的两位数给他,跟他说——得了,拿走吧

    现在他也不仔细查看我的余额明细了,瞄了一眼大概的余额就收下了

  • 相关阅读:
    python 学习笔记7(类/对象的属性;特性,__getattr__)
    linux 误删文件恢复
    python 学习笔记6(数据库 sqlite)
    hive 函数 Cube
    边标志法填充多边形
    tolua#代码简要分析
    CocoaAsyncSocket + Protobuf 处理粘包和拆包问题
    【设计模式】适配器模式
    【设计模式】外观模式
    【操作系统】进程管理(二)
  • 原文地址:https://www.cnblogs.com/my_captain/p/9211504.html
Copyright © 2011-2022 走看看