[关闭]
@chyoo1991 2015-09-02T16:49:19.000000Z 字数 1394 阅读 4899

Python re 库常用函数

python re


最近的项目中用到re库。此前在《Python基础教程》里面看到有说,如果要用正则表达式,那么就为自己创造了一个问题。于是对re避之不及。其实这种态度相当不好,你看,这两天我就为这事儿特头疼。还是好好总结一下比较好。


常用方法


1. re.match

从字符串开始匹配一个模式,这点与search()不一样,重点在于match是从开头字符串匹配。如果没有,返回None

  1. import re
  2. text = 'abc 123 bcd'
  3. m = re.match(r'(\w+)\s', text)
  4. print m.group(0), m.group(1)
  5. # result: abc abc

这里面特别要提一下group方法。group(0)group()返回是一样的,都是整体的匹配结果。其他group(x)所带的数字参数x与正则表达式中的()的个数和位置有关。

如果要取得第一个()的匹配结果,那么就该用group(1),依次类推。

要想一下子取得所有的()的匹配结果,用groups()方法。


2. re.search

返回字符串中第一个符合匹配的模式,如果没有则返回None。具体用法同match()函数。


3. re.sub

用于替换字符串,类似于str对象的replace()方法。[PS:这个函数名字起的真不好,容易让人以为是取子字符串。]

  1. import re
  2. text = 'I love BIT.'
  3. print re.sub('\s+', '-', text)
  4. # result: I-love-BIT. 默认全部替换。
  5. print re.sub('\s+', '-', text, 1)
  6. # result: I-love BIT. 只替换一个。
  7. # replace 方法
  8. print text.replace(' ', '-')
  9. # result: I-love-BIT. 默认全部替换。
  10. print text.replace(' ', '-', 1)
  11. # result: I-love BIT. 最多替换一个。

4. re.compile

将经常使用的正则表达式编译成一个对象,然后用这个对象去匹配字符串。

  1. import re
  2. pattern = r'android[ /](?P<version>\d+\.\d+)' #匹配手机user-agent中的android手机和版本号
  3. 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()
  4. p = re.compile(pattern)
  5. m = p.search(ua)
  6. print m.group(0)
  7. # result: android 4.3
  8. print m.group('version')
  9. # result: 4.3

上面这样写,当有多个ua要进行匹配,由于正则表达式已经编译成对象了,于是效率比直接用字符串search()match()高。


5. re.findall

如其名字所示,是返回所有满足匹配规则的字符串。注意返回结果是一个list对象。

  1. import re
  2. text = 'abc 123 def 456 ghi'
  3. print re.findall(r'\w+\s', text)
  4. # result: ['abc ', '123 ', 'def ', '456 ']

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注