python通过re模块来实现。本篇文章着重对Python的RE进行介绍
re 模块
首先通过 re.compiler把正则表达式编译成Pattern对象:
pattern = re.compiler(r'python')
这里r'python'的r是表示后面的字符串是原生字符串避免了转义字符导致的麻烦
比如
#两者是等价的
pattern = re.compiler(r'\\')
pattern = re.compiler('\\\\')
同样都是匹配双斜杠,用原声字符串就会变得很简洁明了。
Pattern的属性:
pattern: 编译时用的表达式字符串。
flags: 编译时用的匹配模式。
groups: 表达式中组的数量。
groupindex: 有别名的组的字典,别名是键,编号是值。
match 的属性:
#coding:utf-8
import re
match = re.match(r'(\w+) (?P<python>\w+)(.?)','hello python!')
print 'match.string:',match.string #匹配的字符串
print 'match.re:',match.re #使用pattern对象的位置
print 'match.pos:',match.pos #匹配字符串的开始位置
print 'match.endpos:',match.endpos #匹配字符串的结束位置
print 'match.lastindex:',match.lastindex #最后一个被捕获的分组在文本中的索引
print 'match.lastgroup:',match.lastgroup #最后一个被捕获的分组的别名
print 'match.group(1,3):',match.group(1,2,3) #获取元组中第123个元素
print 'match.group():',match.group() #group不添加参数默认值为0返回所有匹配的字符串
print 'match.groupdict():',match.groupdict() #获取字典用别名作为字典的键值
print 'match.start(1):',match.start(1) #获取指定组匹配子串在string中的开始索引
print 'match.end(1):',match.end(1) #获取指定组匹配子串在string中的结束索引
print 'match.span(1,1):',match.span(1) #返回star(1)+end(1)
print r"m.expand(r'\3 \2 \1):",match.expand(r'\3 \2 \1')#重新定义组合返回
'''------------output--------------------
match.string: hello python!
match.re: <_sre.SRE_Pattern object at 0x7f46cf885ad0>
match.pos: 0
match.endpos: 13
match.lastindex: 3
match.lastgroup: None
match.group(1,3): ('hello', 'python', '!')
match.group(): hello python!
match.groupdict(): {'python': 'python'}
match.start(1): 0
match.end(1): 5
match.span(1,1): (0, 5)
m.expand(r'\3 \2 \1): ! python hello
'''
re模块中提供给我们的一些方法:
1.match(pattern,string,flags)|pattern.match(string,flags)
2.search(pattern,string,flags)|pattern.search(string,flags)
3.split(string,maxspilit,flags)|re.split(pattern,sting,maxspilt,flags)
4.findall(string,flags)|re.findall(pattern,string,flags)
5.finditer(string,flags)|re.finditer(pattern,string,flags)
6.sub(repl,string,count,flags)|re.sub(pattern,repl,string,count,flags)
7.subn(repl,string,count,flags)|re.subn(pattern,reple,string,count,flags)
这些方法的使用
#-*-coding:utf-8-*-
import re
pattern = re.compile(r'(\w+) (\w+)(.?)')
text = 'hello python! hello python!'
print '-----match-----'
#重头开始匹配
match = pattern.match(text)
print match.group()
'''
-----match-----
hello python!
'''
print '------search-----'
#全局匹配
search = pattern.search(text)
print search.group()
'''
------search-----
hello python!
'''
print '------split------'
#通过分割的子串将string进行分割,返回list maxsplit分割最大次数默认为全部
split = re.split(r'\s',text)
print split
'''
------split------
['hello', 'python!', 'hello', 'python!']
'''
print '-------findall------'
#搜索string,以列表形式返回全部能匹配的子串。
findall = re.findall(r'\w+',text)
print findall
'''
-------findall------
['hello', 'python', 'hello', 'python']
'''
print '-----findite-------'
#搜索string,返回match对象
finditer = re.finditer(r'\w+',text)
for m in finditer:
print m.group()
'''
-----findite-------
hello
python
hello
python
'''
print '-------sub---------'
#替换子串repl可以是字符串可以是方法可以使用\id \g<id> \g<name>引用分组
sub = re.sub(r'(\w+)','bye',text,count=1)
print sub
sub = re.sub(r'(\w+) (\w+)',r'\2 \1',text)
print sub
def func(m):
return m.group(1)+' the world '
sub = re.sub(r'(\w+) (\w+)',func,text)
print sub
'''---------output--------
-------sub---------
bye python! hello python!
python hello! python hello!
hello the world ! hello the world !
'''
print '--------subn--------'
#返回sub (sub(repl,string,count))
subn = re.subn(r'(\w+)','bye',text)
print subn
subn = re.subn(r'(\w+) (\w+)',r'\2 \1',text)
print subn
def func(m):
return m.group(1)+' the world '
subn = re.subn(r'(\w+) (\w+)',func,text)
print subn
'''---------output--------
--------subn--------
('bye bye! bye bye!', 4)
('python hello! python hello!', 2)
('hello the world ! hello the world !', 2)
'''
'''
以上就是python正则表达式的使用,接下来还会有一个正则表达式的元字符跟语法的文章,代码社会入门小学生一枚希望大家指导不足跟缺点,提供建议。
-----------每天进步一点点,坏狗狗就会离开
网友评论