python笔记

正则表达式

2017-06-20  本文已影响34人  我是一只菜鸟呀

正则表达式是对字符串进行过滤的规则

python中re模块提供了正则表达式的匹配操作

常见匹配模式

参考

注意事项:

1.分组编号是从1开始。

2.分组的引用: \number

3.分组的别名及引用: (?P<alias>abc)(?P=alias)   匹配 abcabc

4.有些虽然用()括起来,但是并不是分组

5.能用非贪婪就不要用贪婪

re模块的几个函数

re.compile

将正则表达式编译成正则表达式对象。

pattern = re.compile(string,flags)

match函数

从起始位置开始匹配,且只能从起始位置开始匹配,找到第一个就返回或者返回None

result = re.match(pattern,string,flags=0)

#pattern可以直接用字符串形式表示,也可以用上面的compile后的正则表达式对象

#flags 通常用到re.S,可以用.匹配换行符\n。详见底部

result.group()

#返回结果:0表示匹配的整个串,1表示匹配的第一个分组,默认是0

search函数

扫描整个字符串,直到找到第一个就返回或者返回None

match和search比较

match必须跟字符串的头部匹配成功,否则返回None,而search是扫描整个字符串,不需要头部必须匹配。

结论

能用search就不要用match

findall函数

以列表的形式返回所有匹配的字符串

注意:列表中的元素将根据正则表达式的写法。

  正则表达式如果没有分组(包括非捕获的括号,例如"(?:abc)"),那么返回值是整个匹配串的列表;

  如果有分组,那返回的列表元素是元组,元组的元素是同一个匹配串中的所有分组。

sub(pattern, repl, string[, count])函数

当repl是一个字符串时,可以使用\id或\g、\g引用分组,但不能使用编号0。

当repl是一个方法时,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。

count用于指定最多替换次数,不指定时全部替换。

s = 'i say, hello world!'

print re.sub('(\w+) (\w+)',r'\2 \1', s)

def func(m):

  return m.group(1).title() + ' ' + m.group(2).title()

print re.sub(pattern,func, s)

### output ###

# say i, world hello!

# I Say, Hello World!

#flags

• re.I(全拼:IGNORECASE): 忽略大小写(括号内是完整写法,下同)

• re.M(全拼:MULTILINE): 多行模式,改变'^'和'$'的行为(参见上图)

• re.S(全拼:DOTALL): 点任意匹配模式,改变'.'的行为

• re.L(全拼:LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定

• re.U(全拼:UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性

• re.X(全拼:VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。

上一篇 下一篇

猜你喜欢

热点阅读