反斜杠问题
与大多数编程语言相同,正则表达式里使用””作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符””,
Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r”\”表示。同样,匹配一个数字的”\d”可以写成r”d”。有了原生字符串,妈妈也不用担心是不是漏写了反斜杠,写出来的表达式也更直观勒。
获得这个匹配模式:需要利用re.compile方法就可以
__author__ = 'CQC' # -*- coding: utf-8 -*- #导入re模块 import re # 将正则表达式编译成Pattern对象,注意hello前面的r的意思是“原生字符串” pattern = re.compile(r'hello') # 使用re.match匹配文本,获得匹配结果,无法匹配时将返回None result1 = re.match(pattern,'hello') result2 = re.match(pattern,'helloo CQC!') result3 = re.match(pattern,'helo CQC!') result4 = re.match(pattern,'hello CQC!') #如果1匹配成功 if result1: # 使用Match获得分组信息 print result1.group()//默认为组0 else: print '1匹配失败!' #如果2匹配成功 if result2: # 使用Match获得分组信息 print result2.group() else: print '2匹配失败!' #如果3匹配成功 if result3: # 使用Match获得分组信息 print result3.group() else: print '3匹配失败!' #如果4匹配成功 if result4: # 使用Match获得分组信息 print result4.group() else: print '4匹配失败!'
属性:
1.string: 匹配时使用的文本 是原来的文本~
2.re: 匹配时使用的Pattern对象。
4.endpos: 文本中正则表达式结束搜索的索引。值与Pattern.match()和Pattern.seach()方法的同名参数相同。
5.lastindex: 最后一个被捕获的分组在文本中的索引。如果没有被捕获的分组,将为None。
# 匹配如下内容:单词+空格+单词+任意字符
m = re.match(r'(w+) (w+)(?P<sign>.*)', 'hello world!')
三个分组
1 w+所有字母 hello
2 w+所有字母 world
3 分组名字为sign 内容为任意字符的*所有(集合)
match()函数只检测re是不是在string的开始位置匹配,search()会扫描整个string查找匹配,
match = re.match(pattern,'hello world!') if match: # 使用Match获得分组信息 print match.group() else:print "NO" ### 输出 ### # world match = re.search(pattern,'hello world!') if match: # 使用Match获得分组信息 print match.group() else:print "NO" match 和 saerch 区别
3)re.split(pattern, string[, maxsplit])
以数字(可以多个数字)为分割 ,maxsplit=2 表示分割两次(不是两部分)指的是用“数字”分割2次(这里有4个数字)
pattern = re.compile(r'd+') print re.split(pattern,'one1two2three3four4') ### 输出 ### # ['one', 'two', 'three', 'four', ''] pattern = re.compile(r'd+') print re.split(pattern,'one1two2three3four4',2) ### 输出 ### # ['one', 'two', 'threefour'] re.split(pattern, string[, maxsplit])
(4)re.findall(pattern, string[, flags])见名思议 find all match 找出所有匹配的,这个应该是很常用的语句吧~
pattern = re.compile(r'W+') 2 print re.findall(pattern, '/one1two*2three3four4!') 3 4 ### 输出 ### 5 # ['/', '*', '!']
w:代表字母数字下划线.
(6)re.sub(pattern, repl, string[, count])
对匹配的文本 用repl 替换 这里的2(id)代表的是第二个分组 0分组是整个文本!!!第一个左括号是第一个分组
pattern = re.compile(r'(w+) (w+)') s = 'i say, hello world!'<br>你看这里的第一个分组就是i<br>第二个分组是say print re.sub(pattern,r'2 1', s)<br>用say i替换i say<br><br>
在这个例子里的 func函数用的挺巧妙
.title是使得第一字母大写?~~?!
import re pattern = re.compile(r'(w+) (w+)') s = 'i say, hello world!' print re.sub(pattern,r'2 1', s) def func(m): return m.group(1)<span style="color: #ff6600;">.title()</span> + ' ' + m.group(2).title() print re.sub(pattern,func, s) ### output ### # say i, world hello! # I Say, Hello World!
re.subn(pattern, repl, string[, count])
只是输出结果中有一个替换次数
输出结果对比
say i, world hello!
I Say, Hello World!
('say i, world hello!', 2)
('I Say, Hello World!', 2)