python 正则表达式

 

符号 说明 举例
literal 匹配字符串的值 foo
re1|re2 匹配正则表达式re1或re2 foo|bar
. 匹配任何字符(换行符除外) b.b
^ 匹配字符串的开始 ^Dear
$ 匹配字符串的结尾 /bin/*sh$
* 匹配前面出现的正则表达式0次或多次 [A-Za-z0-9]*
+ 匹配前面出现的正则表达式1次或多次 [a-z]+\.com
? 匹配前面出现的正则表达式0次或多次 goo?
{N} 匹配前面出现的正则表达式N次 [0-9]{3}
{M,N} 匹配重复出现M-N次的正则表达式 [0-9]{5,9}
[...] 匹配字符组里出现的任意一个字符 [aeiou]
[..x-y..] 匹配从字符x到y中的任意一个字符 [0-9],[A-Za-z]
[^...] 不匹配此字符集中出现的任何一个字符,
包括某一范围的字符
[^A-Za-z0-9_]
(*|+|?|{}) 用于上面出现的任何"非贪婪"版本
重复匹配次数符号(*,+,?,{})
.*?[a-z]
(...) 匹配封闭括号中正则表达式(RE),并保持为子组 ([0-9]{3})?,f(oo|u)bar
     
     
特殊符号    
\d 匹配任何数字,和[0-9]
(\D 是\d 的反义:任何非数符号)
data\d+.txt
\w 匹配任何数字字母字符
(\W 是\w 的反义)
[A-Za-z_]\w+
\s 匹配任何空白符,和[\n\t\r\v\f]
(\S 是\s 的反义)
of\sthe
\b 匹配单词边界
(\B 是\b 的反义)
\bThe\b
\nn 匹配已保存的子组 price: \16
\c 逐一匹配特殊字符c \.,\\,\*
\A(\Z) 匹配字符串的起始(结束) \ADear
     
     
     
常见的正则表达式函数与方法    
compile(pattern,flags=0) 对正则表达式pattern进行编译,并返回一个regex对象  
match(pattern,string,flags=0) 用正则表达式pattern匹配字符串string,
匹配成功返回匹配对象,否则返回None
 
search(pattern,string,flags=0) 用正则表达式pattern匹配字符串string的第一次出现,
匹配成功返回匹配对象,否则返回None
 
findall(pattern,string[,flags]) 在字符串string中查找正则表达式模式pattern的所有(非重复)出现,
返回一个匹配对象的列表
 
finditer(pattern,string[,flags]) 搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器  
split(pattern,string,max=0) 将string 按pattern模式分割后返回列表。
max用于指定最大分割次数,不指定将全部分割。
 
sub(pattern,rep1,string,max=0) 使用repl替换string中每一个匹配pattern的子串后返回替换后的字符串。  
group(num=0) 返回全部匹配对象  
groups() 返回一个包含全部匹配的子元组的元组  

 

关于贪婪匹配和非贪婪匹配举例:

 1 import re
 2 
 3 data='Thu Nov 29 01:14:11 2001::sbitp@mjuoeyjb.org::6777874277-5-8'
 4 
 5 
 6 #非贪婪匹配
 7 patt4='.+?(\d+-\d+-\d+)'
 8 m=re.match(patt4, data)
 9 print(m.group(1))
10 
11 #贪婪匹配
12 
13 patt5='.+(\d+-\d+-\d+)'
14 m=re.match(patt5, data)
15 print(m.group(1))

输出结果:

6777874277-5-8
7-5-8

 

posted @ 2015-01-20 15:09  职场人的思考  阅读(357)  评论(0编辑  收藏  举报