zj2092 发表于 2017-5-1 13:06:13

Python正则表达式操作指南----笔记

  Python正则表达式操作指南 整理:
  原文出处:http://www.amk.ca/python/howto/regex/
  原文作者:A.M. Kuchling (amk@amk.ca)
  授权许可:创作共享协议
  翻译人员:FireHare
  校对人员:Leal
  适用版本:Python 1.5 及后续版本
  整理自http://wiki.ubuntu.org.cn/index.php?title=Python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97&action=edit&section=2
  1. 字符匹配
  这里有一个元字符的完整列表: ^ $ * + ? { [ ] \ | ( )  ,共12个;
  一些用 "\" 开始的特殊字符所表示的预定义字符集通常是很有用的,象数字集,字母集,或其它非空字符集。下列是可用的预设特殊字符:
  \d  匹配任何十进制数;它相当于类 。
\D  匹配任何非数字字符;它相当于类 [^0-9]。
\s  匹配任何空白字符;它相当于类  [ \t\n\r\f\v]。
\S  匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
\w  匹配任何字母数字字符;它相当于类 。
\W  匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]。
  这样特殊字符都可以包含在一个字符类中。如,[\s,.]字符类将匹配任何空白字符或","或"."。
  本节最后一个元字符是 . 。它匹配除了换行字符外的任何字符,在 alternate 模式(re.DOTALL)下它甚至可以匹配换行。"." 通常被用于你想匹配“任何字符”的地方。
  2、重复
    元字符 +:表示匹配一或更多次 ;
  问号 ? :匹配一次或零次;你可以认为它用于标识某事物是可选的。例如:home-?brew 匹配 "homebrew" 或 "home-brew"。
  最复杂的重复限定符是 {m,n}:其中 m 和 n 是十进制整数。该限定符的意思是至少有 m 个重复,至多到 n 个重复。
  {0,} 等同于 *,{1,} 等同于 +,而{0,1}则与 ? 相同。如果可以的话,最好使用 *,+,或?。很简单因为它们更短也更容易懂。
  3、反斜杠的麻烦

    元字符 *。* 并不匹配字母字符 "*";相反,它指定前一个字符可以被匹配零次或更多次,而不是只有一次。

  解决的办法就是为正则表达式使用 Python 的 raw 字符串表示;在字符串前加个 "r"
常规字符串Raw 字符串 "ab*"r"ab*" "\\\\section"r"\\section" "\\w+\\s+\\1"r"\w+\s+\1"   4、编译正则表达式 执行匹配
  通常有一下几个步骤:
  先用re.compile得到一个 RegexObject 表示 一个regexp;
  然后用 pattern的 match search方法等 得到MatchObject;
  再用match object得到匹配的位置,匹配的字符串等信息。
  RegexObject  实例的一些方法和属性
方法/属性作用 match()决定 RE 是否在字符串刚开始的位置匹配 search()扫描字符串,找到这个 RE 匹配的位置 findall()找到 RE 匹配的所有子串,并把它们作为一个列表返回 finditer()找到 RE 匹配的所有子串,并把它们作为一个迭代器返回   MatchObject 实例几个方法和属性:
方法/属性作用 group()返回被 RE 匹配的字符串 start()返回匹配开始的位置 end()返回匹配结束的位置 span()返回一个元组包含匹配 (开始,结束) 的位置   #!python
>>> m.group()
'tempo'
>>> m.start(), m.end()
(0, 5)
>>> m.span()
(0, 5)
  #!python
>>> p = re.compile('\d+')
>>> p.findall('12 drummers drumming, 11 pipers piping, 10 lords a-leaping')
['12', '11', '10']
  #!python
>>> iterator = p.finditer('12 drummers drumming, 11 ... 10 ...')
>>> iterator
<callable-iterator object at 0x401833ac>
>>> for match in iterator:
...     print match.span()
...
(0, 2)
(22, 24)
(29, 31)
  ...............待续
  
页: [1]
查看完整版本: Python正则表达式操作指南----笔记