【Python】正则表达式入门

少女dtysky

世界Skill

时刻2014.06.12

正则表达式用于字符串匹配,其强大之处在于方便和快捷(不说效率),在文本处理的时候非常建议使用。


基础

Python中的正则表达式库为re,使用时加载此库即可:

import re

1.规则:

正则表达式的规则很简单,其基本形式如下:

'a.*b\S+'

其中,a和b为确定字符,表示你希望匹配的具体字符串。
.和\S为特殊字符,用于匹配并非精确确定的东西,比如此处的.表示任意字符(包括空字符),\S表示一个非空字符。
*和+是数量词,比如\S+表示匹配1-无穷个非空字符。

具体的规则可以在这里查看:正则表达式规则表

2.基本使用:

在Python中,使用正则表达式匹配可以用re库下的match方法。
比如我想匹配以下字符串:

text='''<bg trans1>家,房间</bg>'''

制定规则时,可以如此制定:

   :::python
p=r'<\S+\s+S\+>.*</\S+>'

也可以使用ur'xxx'的形式,指定为unicode编码。

含义为:
<+若干非空字符+若干空字符+若干非空字符+>任意字符+

设定好规则之后,便可以进行匹配,匹配方法的使用:

m=re.match(p,text)

如果匹配成功,将会返回匹配值,否则返回None

3.分组:

有时候我们希望不仅仅是匹配,并且能够取得我们所期望的一些字符串,这时候可以使用分组功能。
将规则改写:

p=r'<(\S+)\s+(\S+)>(.*)</(\S+)>'

以()为标识,里面的表达式被视为一个分组,这时再调用match方法,返回的值便是一个分好的数组,调用group方法便可以得到各个分组的数据。
执行:

text='''<bg trans1>家,房间</bg>'''
p=r'<(\S+)\s+(\S+)>(.*)</(\S+)>'
m=re.match(p,text)

可得结果:

>>> print m.group()
<bg trans1>家,房间</bg>
>>> print m.group(0)
<bg trans1>家,房间</bg>
>>> print m.group(1)
bg
>>> print m.group(2)
trans1
>>> print m.group(3)
家,房间
>>> print m.group(4)
bg

如果不是自己的创作,少女是会标识出来的,所以要告诉别人是少女写的哦。