python(学会正则走天下)

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正则表达式的使用,接下来还会有一个正则表达式的元字符跟语法的文章,代码社会入门小学生一枚希望大家指导不足跟缺点,提供建议。

-----------每天进步一点点,坏狗狗就会离开

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容