有几个概念要先了解清楚。
函数:可以直接调用的实现特定功能的代码块。
方法:跟函数一样是实现特定功能的代码块,但是方法跟函数有一点区别,就是方法需要被对象调用,而函数可以直接调用。
正则表达式对象:当使用compile函数,返回的就是一个正则表达式对象。你也可以直接使用一个字符串来表示正则表达式,但最终字符串会被编译成正则表达式对象,而更有效的方法是使用compile函数对字符串进行预编译,有利于提升执行性能。
匹配对象:当成功调用match或search方法,就会返回匹配对象,匹配对象有两个主要方法group和groups。
匹配对象方法
group
group方法可以返回特定的子组,也可以方法整个匹配对象。
groups
这个方法返回包含全部子组的元组。
re模块函数和正则表达式对象方法
match
match试图从字符串起始开始对模式进行匹配,匹配成功就返回匹配对象,失败就返回None。
In [20]: r = re.match('foo', 'fooboo')
In [21]: print(r)
<_sre.SRE_Match object; span=(0, 3), match='foo'>
In [22]: r = re.match('foo', 'booboo')
In [23]: print(r)
None
search
如果匹配模式出现在字符串中间部分而不是起始部分,就要用search而不是match,search会对字符串进行搜索第一次跟模式匹配的部分,匹配成功就返回匹配对象,失败就返回None。
# 有两部分跟模式匹配,只搜索第一部分
In [26]: r = re.search('foo', 'seafooddfooc')
In [27]: r
Out[27]: <_sre.SRE_Match object; span=(3, 6), match='foo'>
In [28]: r.group()
Out[28]: 'foo'
findall
查询字符串中模式匹配到的所有出现情况,返回一个列表。
In [29]: re.findall('foo', 'dfooffoorbfoofooh')
Out[29]: ['foo', 'foo', 'foo', 'foo']
finditer
finditer是与findall类似但更节省内存的变体,这个函数返回的是一个迭代器。
In [39]: r = re.finditer('foo', 'dfooffoorbfoofooh')
In [40]: for i in r:
...: print(i.group())
...:
foo
foo
foo
foo
sub
用于替换字符串中与模式匹配的部分。
In [43]: re.sub('/', '-', '2018/1/1')
Out[43]: '2018-1-1'
split
re.split是比普通字符串split方法更强大的分割字符串处理方式,可以通过定义正则表达式处理复杂的字符串分割。
In [55]: s = 'Mountain View, CA 94040'
In [56]: re.split(', | (?=\d{5}|[A-Z]{2})', s)
Out[56]: ['Mountain View', 'CA', '94040']
# 以上主要参考《Python核心编程》。