[Python编程]正则表达式
目录:
1,引言
2,正则表达式语法
3,re模块
1,引言
正则表达式具有在文本中检索某种模式的能力,正则表达式(RE)为高级文本模式匹配,以及搜索-替代等功能提供了基础。正则表达式(RE)是一些由字符和特殊符号组成的字符串,它们描述了这些字符和字符的某种重复方式,因此能按某种模式匹配一个有相似特征的字符串的集合,因此能按某模式匹配一系列有相似特征的字符串。
很多语言都支持正则表达式,Python也不例外,Python也是有正则表达式模块re让Python更加适合处理文本和数据。Python通过标准库的re模块支持正则表达式(RE)。
2,正则表达式语法
下面是Python中正则表达式的一些匹配规则:(来源于Python核心编程)
2.1 数量词的贪婪模式与非贪婪模式
正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪的则相反,总是尝试匹配尽可能少的字符。例如:正则表达式"ab*"如果用于查找"abbbc",将找到"abbb"。而如果使用非贪婪的数量词"ab*?",将找到"a"。
2.2 反斜杠的困扰
与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。同样,匹配一个数字的"\\d"可以写成r"\d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。
3,re模块
Python的re模块:核心函数和方法
模块的函数:
compile(pattern,flag=0) :对正则表达式模式pattern进行编译,flag是可选标识符,并返回一个regex对象
可以把正则表达式编译成一个正则表达式对象。可以把那些经常使用的正则表达式编译成正则表达式对象,这样可以提高一定的效率。
re模块的函数和regex对象的方法:
match(pattern,string,flag=0):尝试用正则表达式模式pattern匹配字符串string,flag是可选标识符,如果匹配成功,则返回一个匹配对象,否则返回None
search(pattern,string,flag=0):在字符串string中搜索正则表达式模式pattern的第一次出现,flag是可选标识符,如果匹配成功。则返回一个匹配对象,否则返回None
findall(pattern,string[,flags]):在字符串string中搜索正则表达式模式pattern的所有(非重复)出现:返回一个匹配对象的列表
finditer(pattern,string[,flags]):和findall()相同,但是返回的不是列表而是迭代器,对于每一个匹配,该迭代器返回一个匹配对象
split(pattern,string,max=0):更加正则表达式pattern中的分隔符吧字符string分割成为一个列表,返回成功匹配的列表,最多分割max次(默认是分割所有匹配的地方)
sub(pattern,repl,string,max=0):把字符串string中所有匹配正则表达式pattern的地方替换成字符串repl,如果max的值有给出,则对所有匹配的地方进行替换
匹配对象的方法:
group(num=0):返回全部匹配对象(或者指定编号是num的子组)
groups():返回一个包含全部匹配的子组的元组(如果没有成功匹配,就返回一个空元组)
<span style="font-size:18px;">import re
pattern = re.compile(r'foo')
m = re.match(pattern,'foohelloworldpython')
if m is not None:
m.group()
else:
print 'None'
'foo'
m = re.search(pattern,'hellopythonfoo')
if m is not None:
m.group()
else:
print 'None'
'foo'
re.findall(pattern,'foo findfooitem food')
['foo','foo','foo']
re.sub('X','Mr.Smith','attn:X\n\nDear X,\n')
'attn:Mr.Smith\012\012Dear Mr.Smith,\012'
re.split(':','str1:str2:str3')
['str1','str2','str3']</span>