美文网首页
python正则表达式(二)

python正则表达式(二)

作者: 伟大的洪立 | 来源:发表于2017-11-15 14:49 被阅读0次

re模块的高级应用

search

  • 执行正则表达式搜索并且在搜索结束后返回所匹配到的串,只返回第一次匹配到的结果求出帖子阅览的次数:
Paste_Image.png

findall

  • 匹配所有的对象,返回一个列表
>>> re.findall(r"\d+","1 当前浏览量是8808次,回帖人数是200人")
['1', '8808', '200']

sub

  • 实现查找替换
>>> re.sub(r"\d+","1024","当前浏览量是8808次")
'当前浏览量是1024次'

还可使用函数来操作匹配到的对象

def add(temp):
     return str(int(temp.group())+1)

re.sub(r"\d+",add,"当前浏览量是8808次,200")
结果为:'当前浏览量是8809次,201'

split

  • 分割字符串,结果返回列表
a = re.split('\.','www.baidu.com')
Paste_Image.png

finditer

  • 返回一个迭代器iterator,这个iterator yield match objects.返回顺序、内容和re.findall()相同
re.finditer('[a-n]', 'gaoqian')
<callable_iterator at 0x7f6c58629e10>
Paste_Image.png

compile

  • compile用来编译正则表达式模式字符串,并生成Regular Expression Objects。
compile(pattern, flags=0)
    Compile a regular expression pattern, returning a pattern object.

flags有很多可选值:

  1. re.I(IGNORECASE)忽略大小写,括号内是完整的写法
  2. re.M(MULTILINE)多行模式,改变^和$的行为
  3. re.S(DOTALL)点可以匹配任意字符,包括换行符
  4. re.L(LOCALE)做本地化识别的匹配,不推荐使用
  5. re.U(UNICODE) 使用\w \W \s \S \d \D使用取决于unicode定义的字符属性。在python3中默认使用该flag
  6. re.X(VERBOSE)冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注释
import re

str = "LIjianhongJgd"

p = re.compile("Li",re.I) # 表示li或略大小写,即LI、li、Li、lI都能匹配

p.match(str)

结果如下:
<_sre.SRE_Match object; span=(0, 2), match='LI'>

匹配算法:贪婪与懒惰

  • 在Python中正则默认是贪婪模式(个别语言中也可能是非贪婪模式),贪婪模式就是总会尝试匹配更多的字符。
  • 非贪婪模式则反之,总是尝试匹配尽可能少的字符。
  • 在*、?、+、{m,n}后面加上?,可以将贪婪模式变成非贪婪模式。
Paste_Image.png

举个栗子

>>> re.match(r"this .*","this is a number 56-89-89-458-12531")

<_sre.SRE_Match object; span=(0, 35), match='this is a number 56-89-89-458-12531'>

>>> re.match(r"this .*?","this is a number 56-89-89-458-12531")

<_sre.SRE_Match object; span=(0, 5), match='this '>

>>> re.match(r".+(\d+-\d+)","this is a number 56-89-89-458-12531")
结果为:
<_sre.SRE_Match object; span=(0, 35), match='this is a number 56-89-89-458-12531'>

>>> re.match(r".+(\d+-\d+?)","this is a number 56-89-89-458-12531")
结果为:
<_sre.SRE_Match object; span=(0, 31), match='this is a number 56-89-89-458-1'>

相关文章

  • 正则表达式

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

  • Python notes(3/3)

    目录 一,Python 面向对象 二,Python 正则表达式 三,Python CGI编程 四,Python 操...

  • 正则表达式

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

  • Python正则表达式

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

  • Python正则表达式指南

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

  • Python正则表达式初识(三)

    前几天给大家分享了Python正则表达式基础(一)和Python正则表达式基础(二),感兴趣的小伙伴可以点击进去学...

  • Python正则表达式初识(三)

    前几天给大家分享了Python正则表达式基础(一)和Python正则表达式基础(二),感兴趣的小伙伴可以点击进去学...

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

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

  • python正则表达式

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

  • Python正则表达式(二)正则匹配模块re

    请移步我的个人博客:Python正则表达式(二)正则匹配模块re

网友评论

      本文标题:python正则表达式(二)

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