美文网首页程序员Python 运维
python(学会正则走天下)

python(学会正则走天下)

作者: 苏鑫的博客 | 来源:发表于2017-06-14 15:25 被阅读0次

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

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

相关文章

  • python(学会正则走天下)

    python通过re模块来实现。本篇文章着重对Python的RE进行介绍re 模块首先通过 re.compiler...

  • 一篇文章深析Python爬虫核心,正则表达式其实很容易!

    python爬虫正则表达式介绍 元字符 ^ $ * + . | ? {} [] () 这就是元字符了,学会这些应该...

  • 正则表达式

    Python正则表达式初识(一) Python正则表达式初识(二) Python正则表达式初识(三) Python...

  • 正则表达式

    Python:正则表达式Python:正则表达式

  • Python正则表达式指南

    Python正则表达式指南 本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达...

  • Python爬虫(十)_正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • python正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • python 正则匹配中文

    # python 正则匹配中文 >``` #!/usr/bin/env python # -*- coding: ...

  • Python中的re模块

    Python中的re模块 Python中提供perl风格的正则表达式模式,re模块使Python拥有全部的正则表达...

  • Python正则表达式

    目录一、正则表达式语法二、Python支持的其它正则表达式的标志位flags三、标准库模块 re Python正则...

网友评论

    本文标题:python(学会正则走天下)

    本文链接:https://www.haomeiwen.com/subject/gzdsqxtx.html