码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式2

时间:2017-10-18 09:58:19      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:src   个人   问题   png   images   sas   print   hit   pattern   

参考:http://www.jb51.net/article/65286.htm

1、[^]代表除了内部包含的字符以外都能匹配

import re
key = r"mat cat hat pat"
p1 = r"[^p]at"#这代表除了p以外都匹配
pattern1 = re.compile(p1)
print (pattern1.findall(key))

#[‘mat‘, ‘cat‘, ‘hat‘]

2、为了方便我们写简洁的正则表达式,它本身还提供下面这样的写法

技术分享

3、我们常常会在实战中遇到一些匹配的不准确的问题

import re
key = r"chuxiuhong@hit.edu.cn"
p1 = r"@.+\."#我想匹配到@后面一直到“.”之间的,在这里是hit
pattern1 = re.compile(p1)
print (pattern1.findall(key))

#[‘@hit.edu.‘]

你咋能多了呢?我理想的结果是@hit.,你咋还给我加量了呢?这是因为正则表达式默认是“贪婪”的,我们之前讲过,“+”代表是字符重复一次或多次。但是我们没有细说这个多次到底是多少次。所以它会尽可能“贪婪”地多给我们匹配字符,在这个例子里也就是匹配到最后一个“.”。
我们怎么解决这种问题呢?只要在“+”后面加一个“?”就好了。

import re
key = r"chuxiuhong@hit.edu.cn"
p1 = r"@.+?\."#我想匹配到@后面一直到“.”之间的,在这里是hit
pattern1 = re.compile(p1)
print (pattern1.findall(key))

#[‘@hit.‘]

 加了一个“?”我们就将贪婪的“+”改成了懒惰的“+”。

 个人建议:在你使用"+","*"的时候,一定先想好到底是用贪婪型还是懒惰型,尤其是当你用到范围较大的项目上时,因为很有可能它就多匹配字符回来给你

4、  为了能够准确的控制重复次数,正则表达式还提供

  {a,b}(代表a<=匹配次数<=b)

  如果你省略掉{1,2}中的2,那么就代表至少匹配一次
  如果你省略掉{1,2}中的1,那么就代表至多匹配2次。

  还是举个栗子,我们有sas,saas,saaas,我们想要sas和saas,我们怎么处理呢?

import re
key = r"saas and sas and saaas"
p1 = r"sa{1,2}s"
pattern1 = re.compile(p1)
print (pattern1.findall(key))

#[‘saas‘, ‘sas‘]

5、技术分享

正则表达式2

标签:src   个人   问题   png   images   sas   print   hit   pattern   

原文地址:http://www.cnblogs.com/tantao258/p/7684823.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!