Python学习笔记(三)——正则表达式

  1. 中文维基百科
    https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F
    Python说明文档
    https://docs.python.org/2.7/library/re.html
  2. ^ :匹配行首
    $ :匹配行末尾
    . :匹配任意字符
    \s :匹配空白字符(空格、TAB和回车)
    \S :匹配任意非空白字符
    * :匹配前面的子表达式零次或多次
    *? :匹配前面的子表达式零次或多次。(非贪婪模式^1
    + :匹配前面的子表达式一次或多次
    +? :匹配前面的子表达式一次或多次。(非贪婪模式)
    [aeiou] :匹配所包含的任意一个字符
    [^XYZ] :匹配未列出的任意一个字符
    [a-z0-9] :匹配指定范围内的任意字符序列
    [^A-Za-z] :第一个字符是^,它表示反向逻辑。这里匹配除了大小写字符之外的其他任意字符
    (RegExp) :获取括号内的字符串
    例1:^X.*:,匹配:
     X-Sieve: CMU Sieve 2.3
     X-DSPAM-Result: Innocent
     X-Plane is behind schedule: two weeks
    
    例2:^X-\S+:,匹配:
     X-Sieve: CMU Sieve 2.3
     X-DSPAM-Result: Innocent
    
    例3:[0-9]+,匹配:2,19,42
  3. 正则表达式库在使用之前必须先导入到程序中:import re
  4. re.search(RegExp,str):判断字符串是否匹配正则表达式,返回True或者False(类似函数find())。例如:
    1
    2
    3
    # 判断字符串“line”是否以“From:”开头
    if re.search('^From:',line): # 等价于line.startwith('From:')
    ...
  5. re.findall(RegExp,str):通过正则表达式的匹配,抽取所有符合的子字符串,返回字符串列表
  6. (RegExp):获取括号内的字符串。例如:
    1
    2
    3
    4
    5
    x = 'From stephen.marquard@uct.ac.za Sat Jan  5 09:14:16 2008'
    y = re.findall('^From (\S+@\S+)',x)
    print y # 打印出“['stephen.marquard@uct.ac.za']”
    z = re.findall('@([^ ]*)',x)
    print z # 打印出“['uct.ac.za']”
  7. 转义字符:\。例如:
    # 在这个例子中由于$符号之前有一个反斜杠,它实际上匹配的是美元符号本身, 不是匹配一行的结尾
    # 正则表达式的其他部分匹配一个或多个数字和句点
    # 注意,方括号内,字符没有特殊性。
    # 因此,[0-9.]实际表示数字和句点。方括号之外,句点是一个通配符,匹配任意字符。在方括号之内,句点就代表它本身。
    import re
    x = 'We just received $10.00 for cookies.'
    y = re.findall('\$[0-9.]+',x)
    print y # 打印出“['$10.00']”