Record and Summarize

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1、正则表达式元字符介绍

  •  . 表示任意一个字符,默认不包括换行符号,如果使'.'包括任何字符。可以使用如下写法:
pat = re.compile(r".*", re.DOTALL)
pat.search(strvar)
  •  ^ 表示一个字符串的开头
  •  $ 表示一个字符串的结尾
  •  * 表示对于前一个字符重复0到无穷次
  •  + 表示对于前一个字符重复1到无穷次
  •  ? 表示对于前一个字符重复0到1次
  •  *?, +?, ?? 由于*,+,?都是贪婪的,例如通过<.*>查找'<H1>title</H1>'时,并不会匹配'<H1>'和'</H1>',而是匹配'<H1>title</H1>' 。因此在当加上?后,就会变为非贪婪的。是否加上?根据实际情况决定
  •  {m} 表示对于前一个字符重复m次
  •  {m,n} 表示对于前一个字符重复次数在为m到n次,其中,{0,} = *,{1,} = +, {0,1} = ?
  •  {m,n}? 表示非贪婪的{m,n}
  •  \ 强烈建议正则表达式使用原生字符串(raw string),一般字符串会使正则表达式变得很复杂且难理解
  •  [] 表示一个字符集。[]中的特殊字符都表示普通字符;对于 ] 和 - ,可以在它们前面加上 \ ,或者将它们放在最前面;由于转义字符 \ 可以使用,因此 \w 或 \S 也可以使用;当[]里的第一个字符是 ^ 时,表示取非,而如果 ^ 不是第一个字符,则仅表示一个字符。
  •  | 表示或,例如A|B,表示匹配A或B,若能够匹配A,则不再检查B。
  •  () 表示一个group 注意,这是重点!!!
  •  \d 匹配任何十进制数;它相当于类 [0-9]。
  •  \D 匹配任何非数字字符;它相当于类 [^0-9]。
  •  \s 匹配任何空白字符;它相当于类 [[ \t\n\r\f\v]。注意空格
  •  \S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]]。注意空格
  •  \w 匹配任何字母数字下划线字符;它相当于类 [a-zA-Z0-9_]。
  •  \W 匹配任何非字母数字下划线字符;它相当于类 [^a-zA-Z0-9_]。

2、re.search(pattern, string[, flags])

在string中查找pattern,如果找到一个匹配就返回一个MatchObject对象(并不会匹配所有的)
参数
  pattern:正则表达式
  string:字符串
返回值
  如果找到,则返回一个MatchObject实例;否则返回None

3、re.match(pattern, string[, flags])
与search的唯一区别是,必须从string中的第一字符开始匹配,注意是“从第一个字符开始就必须匹配”;而search可以从任意位置开始匹配

4、re.split(pattern, string[, maxsplit=0])
用pattern来拆分string。如果pattern有含有括号,那么在pattern中所有的组也会返回。maxsplit表示最大拆分数。返回列表。例如:

>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']

注意下面这种情况,当string中最前面的子字符串或最后面的子字符串能够匹配时,那么返回的列表的第一个元素或最后一个元素是空字符串:

>>> re.split('(\W+)', '...words, words...')
['', '...', 'words', ', ', 'words', '...', '']

5、re.findall(pattern, string[, flags])
以list的形式返回string中所有与pattern匹配的不重叠的字符串。string从左向右扫描,匹配的返回结果也是以这个顺序。

6、re.sub(pattern, repl, string[, count])
对所有匹配的子字符串进行替换
参数
  pattern:正则表达式
  repl:被替换的字符串
  string:原始字符串
返回值
  返回一个替换后的字符串,如果没有匹配,则返回的字符串与string相同

7、MatchObject.group([group1, ...])
根据参数的不同返回情况不同:如果参数为空或0,返回一个匹配的完整的字符串;若参数是1个非0参数,则返回对应group的字符串;如果参数有若干个,且每个参数都大于0,则返回一个元组,每一项是一个参数对应的group。

>>> m = re.match(r"(\w+) (\w+)", "Isaac Newton, physicist")
>>> m.group(0)       # The entire match
'Isaac Newton'
>>> m.group(1)       # The first parenthesized subgroup.
'Isaac'
>>> m.group(2)       # The second parenthesized subgroup.
'Newton'
>>> m.group(1, 2)    # Multiple arguments give us a tuple.
('Isaac', 'Newton')

8、MatchObject.groups([default])
返回一个包含所有group的元组。default是用来设置没有匹配时的默认值的。default默认是None。

>>> m = re.match(r"(\d+)\.(\d+)", "24.1632")
>>> m.groups()
('24', '1632')

对于下面这种情况,并不是所有的group都参与了匹配过程,因为“?”表示重复0或1次,那么这些没有参与的group就用None来代表,除非指定了[default]

>>> m = re.match(r"(\d+)\.?(\d+)?", "24")
>>> m.groups()      # Second group defaults to None.
('24', None)
>>> m.groups('0')   # Now, the second group defaults to '0'.
('24', '0')

9、MatchObject.start([group]) 和 MatchObject.end([group])
返回匹配的字符串在原始字符串中的起始位置,以及结束位置的下一个位置。参数是group号,如果指定,则返回该group的start和end位置;如果未指定,或指定为0,则返回整个匹配字符串在原字符串中的start和end位置

10、re.compile(patternflags=0)

Compile a regular expression pattern into a regular expression object, which can be used for matching using its match() and search() methods, described below.

The sequence

prog = re.compile(pattern)
result = prog.match(string)

is equivalent to

result = re.match(pattern, string)

The expression’s behaviour can be modified by specifying a flags value. Values can be any of the following variables, combined using bitwise OR (the |operator). flag参数除了之前提到的re.DOTALL,还包括其他的。

 

posted on 2013-12-30 18:20  zhangjing327  阅读(243)  评论(0编辑  收藏  举报