@chyoo1991
2015-09-02T16:49:19.000000Z
字数 1394
阅读 4899
re
库常用函数python
re
最近的项目中用到
re
库。此前在《Python基础教程》里面看到有说,如果要用正则表达式,那么就为自己创造了一个问题。于是对re
避之不及。其实这种态度相当不好,你看,这两天我就为这事儿特头疼。还是好好总结一下比较好。
re.match
从字符串开始匹配一个模式,这点与
search()
不一样,重点在于match
是从开头字符串匹配。如果没有,返回None
。
import re
text = 'abc 123 bcd'
m = re.match(r'(\w+)\s', text)
print m.group(0), m.group(1)
# result: abc abc
这里面特别要提一下group方法。
group(0)
和group()
返回是一样的,都是整体的匹配结果。其他group(x)
所带的数字参数x
与正则表达式中的()
的个数和位置有关。如果要取得第一个
()
的匹配结果,那么就该用group(1)
,依次类推。要想一下子取得所有的
()
的匹配结果,用groups()
方法。
re.search
返回字符串中第一个符合匹配的模式,如果没有则返回
None
。具体用法同match()
函数。
re.sub
用于替换字符串,类似于
str
对象的replace()
方法。[PS:这个函数名字起的真不好,容易让人以为是取子字符串。]
import re
text = 'I love BIT.'
print re.sub('\s+', '-', text)
# result: I-love-BIT. 默认全部替换。
print re.sub('\s+', '-', text, 1)
# result: I-love BIT. 只替换一个。
# replace 方法
print text.replace(' ', '-')
# result: I-love-BIT. 默认全部替换。
print text.replace(' ', '-', 1)
# result: I-love BIT. 最多替换一个。
re.compile
将经常使用的正则表达式编译成一个对象,然后用这个对象去匹配字符串。
import re
pattern = r'android[ /](?P<version>\d+\.\d+)' #匹配手机user-agent中的android手机和版本号
ua = 'Mozilla/5.0 (Linux; U; Android 4.3; zh-CN; SCH-N719 Build/JSS15J) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 YisouSpider/1.0.0 Mobile Safari/533.1'.lower()
p = re.compile(pattern)
m = p.search(ua)
print m.group(0)
# result: android 4.3
print m.group('version')
# result: 4.3
上面这样写,当有多个ua要进行匹配,由于正则表达式已经编译成对象了,于是效率比直接用字符串
search()
和match()
高。
re.findall
如其名字所示,是返回所有满足匹配规则的字符串。注意返回结果是一个list对象。
import re
text = 'abc 123 def 456 ghi'
print re.findall(r'\w+\s', text)
# result: ['abc ', '123 ', 'def ', '456 ']