Python正则表达式实战

写的很详细的一篇文章:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

重要概念(re模块):

re模块内包含许多重要的方法、一个Match对象和一个Pattern对象

1、重要的方法

re.compile:构造一个Pattern对象

re.match:判断string是否匹配

re.search:查找子串

re.split:按照匹配的子串将string分割并返回一个列表

re.findall:搜索string以列表形式返回匹配的子串

re.sub:替换string中全部匹配的子串后返回替换后的string

以上除了compile,其余的第一个参数都是正则表达式或者生成的Pattern对象,使用Pattern对象时都有对应的Pattern.***方法,而使用正则表达式就意味着不能复用Pattern对象。

match和search方法返回Match对象,因而正则表达式中的小括号很重要。

split和findall正好是互补的结果,sub替换的就是findall的结果,但有小括号()时有点特殊。

2、Match对象

match和search方法返回的对象,它包含一些重要的属性和方法,其中group方法是正则表达式中小括号的匹配结果,group(0)表示整个的匹配,groups()返回从1开始的所有group组成的元组。

3、Pattern对象

编译过的正则表达式,包含re模块中类似的方法。

这里主要用具体的代码演示:

1、判断string是否匹配

string = 'AabBxyz'
pattern = re.compile('A(.*)B')
search = re.match(pattern, string)
if search:
    print(search.group())
else:
    print('not match')

结果输出AabB,若string='xyzAabBxyz'结果则是not match。可见match是正则表达式结束时还能匹配就行,如需匹配到string结束加上$符就行了。

2、查找子串

string = 'xyzAaaBxyzAbbBxyz'
pattern = re.compile('A(.*)B')
search = re.search(pattern, string)
print(search.group())
print(search.groups())

输出AaaBxyzAbbB和('aaBxyzAbb',),没有输出第一个AaaB是因为小括号中间的(.*)是贪婪的,要非贪婪则使用(.*?),就能匹配到AaaB。

3、查找所有的子串

string = 'xyzAaaBxyzAbbBxyz'
pattern = re.compile('A.*B')
search = re.findall(pattern, string)
print(search)
pattern = re.compile('A(.*)B')
search = re.findall(pattern, string)
print(search)
pattern = re.compile('A(.*)B.*A(.*)B')
search = re.findall(pattern, string)
print(search)

输出['AaaBxyzAbbB'],['aaBxyzAbb'],[('aa', 'bb')],可见findall并非真正意义的findall,和search一样从前往后匹配,搜索起点只增不减。

4、切割子串

string = 'xyzAaaBxyzAbbBxyz'
pattern = re.compile('A.*B')
search = re.split(pattern, string)
print(search)
pattern = re.compile('A(.*)B')
search = re.split(pattern, string)
print(search)
pattern = re.compile('A(.*)B.*A(.*)B')
search = re.split(pattern, string)
print(search)

输出['xyz', 'xyz'],['xyz', 'aaBxyzAbb', 'xyz'],['xyz', 'aa', 'bb', 'xyz'],第一条加?才能输出['xyz', 'xyz', 'xyz']。

5、替换子串

string = 'xyzAaaBxyzAbbBxyz'
pattern = re.compile('A.*B')
search = re.sub(pattern, 'cc', string)
print(search)
pattern = re.compile('A(.*)B')
search = re.sub(pattern, 'cc', string)
print(search)
pattern = re.compile('A(.*)B.*A(.*)B')
search = re.sub(pattern, 'cc', string)
print(search)

输出全部是xyzccxyz。

你可能感兴趣的:(Python)