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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容