正则基础知识(字符组和量词)


                       
一、字符组

1. [0123456789]匹配0-9这些数字,也可以用[0-9]来表示,这种表示方法的原理实际上是利用了字符对应的ascII码,0-9对应48-57,当然也可以[A-Z][a-z]来表示字母,其中A-Z对应65-90,a-z对应97-122,但是[0-z]这种表示方法最好不要用,因为很多符号之类的字符,比如";","<"等等之类的也在[0-z]的范围内。
    例如:re.search("^[0-z]$", ":") != None  # => True


2.  "^",  "$" 分别匹配字符的起始位置和结束位置
    例如: re.search("^[0-9]", "2a") != None # => True
           re.search("[0-9]$", "a2") != None # => True
           re.search("[0-9]$", "2a") != None # => False
           re.search("^[0-9]$", "23") != None # => False (起始位置和结束位置都匹配的话,只适用于整个字符串就是一个数字符号的情况下)
           re.search("^[0-9]$", "2") != None # => True

3. 元字符是指 “-”, “[”, “]”, “^”, “$”等等,如果要取消元字符的特殊含义,就需要转义,就是在元字符前加上“\”,其中“-”紧接着“[”也可以表示在字符组内部使用“-”
    例如:re.search("^[-09]", "3") != None  # =>False
          re.search("^[-09]", "-") != None  # =>True
          re.search("^[0\\-9]", "-") != None # =>True

4. 原生字符串的使用
   Python提供了原生字符串,形式为r"string",例如:r"^[0\-9]$" == "^[0\\-9]$",在Python里面尽量多用原生字符串。

5. 排除型字符组
   书写格式为:[^],在“[”后面紧跟一个“^”,表示在当前位置,匹配一个没有列出的字符,例如:
          re.search(r"^[^0-9][0-9]$", "A8") != None  # =>True
          re.search(r"^[^0-9][0-9]$", "8")  != None  # =>False (排除型字符组必须要匹配一个字符)
    另外,在排除型字符组中,紧跟在“^”之后的“-”不是元字符,例如:
          re.search(r"^[^-09]$", "-") != None # => False

6. 字符组简记法
   \d 表示[0-9] ,d代表digit
   \w 表示[0-9a-zA-Z_],看清楚,后面还有个"_", w代表word
   \s 表示[ \t\r\n\v\f], s代表space

   \D是\d的排除型字符组
   \W是\w的排除型字符组
   \S是\s的排除型字符组

   [\s\S]这种用法表示任意字符

二、量词

1.一般形式{n},例如\d{6}表示匹配6个数字
  {m,n},例如\d{4,6}表示4到6个数字,记住逗号前后不要有空格
  {m,],表示至少有m个
  {0,n}, 表示之多有n个(在某些语言中也可是{,n})

2.常用量词
  * 等价于{0,}
  + 等价于{1,}
  ? 等价于{0,1}
  例如:re.search(r"^travell?er$", "traveler") != None # =>True
        re.search(r"^travell?er$", "traveller") != None # =>True

        re.search(r"^<[^>]+>$", "<body>") != None # =>True
        re.search(r"^<[^>]+>$", "</table>") != None # =>True
        re.search(r"^<[^>]+>$", "<>") != None # =>False

        re.search(r"^\"[^\"]*\"$", "\"some\"") != None # =>True
        re.search(r"^\"[^\"]*\"$", "\"\"") != None # =>True

  注意: 如果查找‘customerId: ccheaaweb|3’中的ccheaaweb的话,可以这样匹配
  re.search(r"customerId: (\w+)\|").group(1),记得要将+写在\w后面而不是括号后面


3.数据提取
  re.search()如果匹配成功,返回一个MatchObject 对象,可以调用MatchObject.group(0)来获取表达式的结果
  例如:
        print re.search(r"\d{6}", "ad123456bc").group(0) = > 123456
  另外一种提取数据的方法是re.findall(pattern, string)
  例如:
        print re.findall(r"\d{6}", "zipcode1:201203, zipcode2:100859")
        = > ['201203', '100859']

4.点号
  一般都认为"."可以匹配任意字符,但是有一个字符不能由点号匹配,那就是换行符\n

5.匹配优先量词(贪婪量词)和忽略优先量词(惰性量词)
  匹配优先量词,在拿不准是否需要匹配的时候,优先尝试匹配,以被将来回溯。如之前的"*","+","?",{m,n},{m,},{,n} 就是匹配优先。
  忽略优先量词,如果不确定是否要匹配,会选择不匹配的状态,在匹配优先量词后后加上"?"就是忽略优先。

你可能感兴趣的:(正则基础)