(董付国)Python 学习笔记---Python字符串与正则表达式(3)

4.2 正则表达式

  • 正则表达式是字符串处理的有力工具和技术。
  • 正则表达式是使用某种预定义的模式去匹配一类具有共同特征的字符串,主要用于处理字符串,可以快速、准确地完成复杂的查找、替换等处理要求,在文本编辑与处理、网页爬虫之类的场合中有重要作用。
  • Python中,re模块提供了正则表达式操作所需要的功能。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    4.2.2 re模块主要方法
    在这里插入图片描述
    4.2.3 直接使用re模块方法
>>> import re                   #导入re模块
>>> text = 'alpha,beta....gamma delta'          #测试用的字符串
>>> re.split('[\. ]+',text)                     #使用指定字符作为分隔符进行分隔
['alpha,beta', 'gamma', 'delta']
>>> re.split('[\. ]+',text,maxsplit = 1)        #最多分隔两次
['alpha,beta', 'gamma delta']
>>> re.split('[\. ]+',text,maxsplit = 2)        #最多分隔两次
['alpha,beta', 'gamma', 'delta']
>>> pat = '[a-zA-Z]+'
>>> re.findall(pat,text)                        #查找所有单词
['alpha', 'beta', 'gamma', 'delta']
>>> pat = '{name}'
>>> text = 'Dear {name}...'
>>> re.sub(pat,'Mr.Dong',text)                  #在text中寻找与pat匹配的项,用‘Mr.Dong ’替换
'Dear Mr.Dong...'
>>> s = 'a s d'
>>> re.sub('a|s|d','Good',s)                    #字符串替换
'Good Good Good'
>>> s = "It's a very good good idea"
"It's a very good idea"
>>> re.sub(r'((\w+) )\1',r'\2',s)               #处理连续的重复单词
"It's a very goodidea"
>>> re.sub('a',lambda x:x.group(0).upper(),'aaa abc abde')      #repl为可调用对象
'AAA Abc Abde'
>>> re.sub('[a-z]',lambda x:x.group(0).upper(),'aaa abc abde')
'AAA ABC ABDE'
>>> re.sub('[a-zA-Z]',lambda x:chr(ord(x.group(0))^32),'aaa abc abde')  #ord是转化成ascii码,chr是转化成字母
'AAA ABC ABDE'
>>> re.subn('a','dfg','aaa abc abde')
('dfgdfgdfg dfgbc dfgbde', 5)
>>> #返回新字符串和替换次数
>>> re.sub('a','dfg','aaa abc abde')
'dfgdfgdfg dfgbc dfgbde'
>>> re.escape('http://www.python.org')          #字符串转义
'http://www\\.python\\.org'

4.2.4 使用正则表达式对象

  • 首先使用re模块的compile()方法将正则表达式编译生成正则表达式对象,然后再使用正则表达式对象提供的方法进行字符串处理。
  • 使用编译后的正则表达式对象可以提高字符串处理速度。
  • 正则表达式对象的match(string[, pos[, endpos]])方法用于在字符串开头或指定位置进行搜索,模式必须出现在字符串开头或指定位置;
  • 正则表达式对象的search(string[, pos[, endpos]])方法用于在整个字符串中进行搜索;
  • 正则表达式对象的findall(string[, pos[, endpos]])方法用于在整个字符串中进行搜索;
  • 正则表达式对象的findall(string[, pos[, endpos]])方法用于在字符串中查找所有符合正则表达式的字符串列表。
  • sub()、subn();正则表达式对象的sub(repl,string[,count = 0])和subn(repl,string[,count = 0])方法用来实现字符串替换功能,其中参数rep可以为字符串或返回字符串的可调用对象。
  • 正则表达式对象的split(string[,maxsplit = 0])方法用来实现字符串分隔。

4.2.5 子模式与match对象

  • 使用()表示一个子模式,括号中的内容作为一个整体出现,例如‘(red)+’可以匹配‘redred’、‘redredred’等多个重复‘red’的情况。
>>> re.sub('a','dfg','aaa abc abde')
'dfgdfgdfg dfgbc dfgbde'
>>> re.escape('http://www.python.org')          #字符串转义
'http://www\\.python\\.org'
>>>
>>>
>>> telNumber = '''Suppose my Phon No.is 0535-1234567,yours if 010-12345678,his is 025-87654321.'''
>>> pattern = re.compile(r'(\d{3,4})-(\d{7,8})')
>>> pattern.findall(telNumber)
[('0535', '1234567'), ('010', '12345678'), ('025', '87654321')]
  • 子模式扩展语法:
    在这里插入图片描述
  • 正则表达式对象的match方法和search方法匹配成功后返回match对象。match对象的主要方法有:
    在这里插入图片描述
  • match() 对象的用法
>>> m = re.match(r"(\w+) (\w+)","Isaac Newton,physicist")
>>> m.group(0)                  #返回整个模式内容
'Isaac Newton'
>>> m.group(1)                  #返回第1个子模式内容
'Isaac'
>>> m.group(2)                  #返回第2个子模式内容
'Newton'
>>> m.group(1,2)                #返回指定的多个子模式内容
('Isaac', 'Newton')
posted @ 2019-08-16 17:43  旅人_Eric  阅读(167)  评论(0编辑  收藏  举报