下面是python学习时候一些正则表达式的总结:
python
re模块包含对 正则表达式。本章会对re模块主要特征和正则表达式进行介绍。web
什么是正则表达式正则表达式
正则表达式是能够匹配文本片断的模式。最简单的正则表达式就是普通字符串,能够匹配其自身。换包话说,正则表达式’python’ 能够匹配字符串’python’ 。你能够用这种匹配行为搜索文本中的模式,而且用计算后有值并发特定模式,或都将文本进行分段。数据库
** 通配符编程
正则表达式能够匹配多于一个的字符串,你可使用一些特殊字符建立这类模式。好比点号(.)能够匹配任何字符。在咱们用window 搜索时用问号(?)匹配任意一位字符,做用是同样的。那么这类符号就叫 通配符。并发
** 对特殊字符进行转义ide
经过上面的方法,假如咱们要匹配“python.org”,直接用用‘python.org’能够么?这么作能够,但这样也会匹配“pythonzorg”,这可不是所指望的结果。函数
好吧!咱们须要对它进行转义,能够在它前面加上发斜线。所以,本例中可使用“python\\.org”,这样就只会匹配“python.org”了。oop
** 字符集学习
咱们可使用中括号([ ])括住字符串来建立字符集。可使用范围,好比‘[a-z]’可以匹配a到z的任意一个字符,还能够经过一个接一个的方式将范围联合起来使用,好比‘[a-zA-Z0-9]’可以匹配任意大小写字母和数字。
反转字符集,能够在开头使用^字符,好比‘[^abc]’能够匹配任何除了a、b、c以外的字符。
** 选择符
有时候只想匹配字符串’python’ 和 ’perl’ ,可使用选择项的特殊字符:管道符号(|) 。所以, 所需模式能够写成’python|perl’ 。
** 子模式
可是,有些时候不须要对整个模式使用选择符---只是模式的一部分。这时可使用圆括号起须要的部分,或称子模式。 前例能够写成 ‘p(ython | erl)’
** 可选项
在子模式后面加上问号,它就变成了可选项。它可能出如今匹配字符串,但并不是必须的。
r’(heep://)?(www\.)?python\.org’
只能匹配下列字符:
‘http://www.python.org’ ‘http://python.org’ ‘www.python.org’ ‘python.org’
** 重复子模式
(pattern)* : 容许模式重复0次或屡次
(pattern)+ : 容许模式重复1次或屡次
(pattern){m,n} : 容许模式重复m~ n 次
例如:
r’w * \.python\.org’ 匹配 ‘www.python.org’ 、’.python.org’ 、’wwwwwww.python.org’ r’w + \.python\.org’ 匹配 ‘w.python.org’ ;但不能匹配 ’.python.org’ r’w {3,4}\.python\.org’ 只能匹配‘www.python.org’ 和‘wwww.python.org’
re模块的内容
re模块中一些重要的函数:
re.compile 将正则表达式转换为模式对象,能够实现更有效率的匹配。
re.search 会在给定字符串中寻找第一个匹配给正则表式的子字符串。找到函数返回MatchObject(值为True),不然返回None(值为False) 。由于返回值的性质,因此该函数能够用在条件语句中:
性质,因此该函数能够用在条件语句中:
if re.serch(pat, string):
print ‘found it !’
re.math 会在给定字符串的开头匹配正则表达式。所以,re.math(‘p’ , ‘python’)返回真,re.math(‘p’ , ‘www.python’) 则返回假。
re.split 会根据模式的匹配项来分割字符串。
>>> import re >>> some_text = 'alpha, beta ,,,gamma delta ' >>> re.split('[,]+',some_text) ['alpha ', 'beta ', 'gamma delta ']
re. findall以列表形式返回给定模式的全部匹配项。好比,要在字符串中查找全部单词,能够像下面这么作:
>>> import re >>> pat = '[a-zA-Z]+' >>> text = '"Hm...err-- are you sure?" he said, sounding insecure.' >>>re.findall(pat,text) ['Hm', 'err','are', 'you','sure', 'he','said', 'sounding','insecure']
re.sub的做用在于:使用给定的替换内容将匹配模式的子符串(最左端而且重叠子字符串)替换掉。
>>> import re >>> pat = '{name}' >>> text = 'Dear{name}...' >>> re.sub(pat, 'Mr.Gumby',text) 'Dear Mr. Gumby...'
re.escape 函数,能够对字符串中全部可能被解释为正则运算符的字符进行转义的应用函数。
若是字符串很长且包含不少特殊字符,而你又不想输入一大堆反斜线,可使用这个函数:
>>> re.escape('www.python.org') 'www\\.python\\.org' >>> re.escape('butwhere is the ambiguity?') 'but\\ where\\ is\\ the\\ ambiguity\\?'
匹配对象和组
简单来讲,组就是放置在圆括号里内的子模块,组的序号取决于它左侧的括号数。组0就是整个模块,因此在下面的模式中:
‘There (was a (wee) (cooper)) who (lived in Fyfe)’
包含组有:
0 There was a wee cooper who lived in Fyfe 1 was a wee cooper 2 wee 3 cooper 4 lived in Fyfe
re 匹配对象的重要方法
下面看实例:
>>> import re >>> m = re.match(r'www\.(.*)\..{3}','www.python.org') >>> m.group() 'www.python.org' >>> m.group(0) 'www.python.org' >>> m.group(1) 'python' >>> m.start(1) 4 >>> m.end(1) 10 >>> m.span(1) (4, 10)
group方法返回模式中与给定组匹配的字符串,若是没有组号,默认为0 ;如上面:m.group()==m.group(0) ;若是给定一个组号,会返回单个字符串。
start 方法返回给定组匹配项的开始索引,
end方法返回给定组匹配项的结束索引加1;
span以元组(start,end)的形式返回给组的开始和结束位置的索引。
----------------------------
正则表达式应该是不容易理解的一个知识点;python没意思的基础终于学完了。虽然学的不扎实,但大致有了个印象;后面的将会很是有意思,读取文件,编写图形窗口,链接数据库,web编程....