zoukankan      html  css  js  c++  java
  • python--模块之re正则表达式

    简介:

    正则表达式本身是一个小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,我们可以通过直接调用来实现正则匹配。

    正则表达式基础知识:

    --普通字符
    匹配自身 abc ----abc

    --元字符

    . :匹配任何字符( )换行符除外
    例:a.a -----aba

    :转义字符
    例:a b ---a b

    * :匹配前一个字符0或多次
    例:a*b ----aaaab;b

    + :匹配前一个字符1次或多次
    例:a+b ----aaaab;ab

    ? :匹配一个字符0次或1次
    例:a?b ---b;ab

    ^ :匹配字符串开头,多行匹配每一行开头
    例:^ab ---ab

    $ :匹配字符串末尾,多行匹配每一行末尾
    例:ab$ ---ab;cb

    reg1 | reg2 :匹配正则表达式reg1或reg2
    例:foo | bar ---foo;bar

    {} : a{m}匹配字符m次,a{m,n}匹配字符m至n次,若省略n,则匹配m至无限次
    例:a{1,2}b ---aab

    [] :字符集,对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出,也可以给出范围,如[^abc]表示取反,即非abc.
    注:所有特殊字符在字符集中都失去其原有的特殊含义。用反斜杠转义恢复特殊含义。
    例:a[bcd]e ---abcde

    () :最基本的组是由一对圆括号括起来的正则式。
    例:(abc){2}a(2|4)d ---abcabca4d

    --特殊字符

    d :数字1~9
    例:adb ---a1b

    D:非数字[^d]
    例:aDc ----abc

    s:匹配任意空白字符[ fv]
    例:asb ---a b

    S:非空白字符[^s]
    例:aSb ---abc

    w:匹配包括下划线在内的任意字符[A-Za-z0-9_]
    例:awc ---abc

    W:匹配非单词字符[^A-Za-z0-9_]
    例:aWb ---a b

    A:仅匹配字符串开头,同^
    例:Aabc ---abc

    :仅匹配字符串末尾,同$
    例:abc ----abc

    B:匹配w和W之间,即匹配单词边界匹配一个单词边界,也就是指单词和空格间的位置。
    例:’er‘ 可以匹配’never‘ 中的’er‘,但不能匹配’verb‘中的’er‘

    B:[^]
    例:aBbc ---abc

    正则表达式的常用函数:

    match和search一旦匹配成功,就是一个match object对象,而match object对象有以下方法:
    group():返回被re匹配的字符串
    可以一次输入多个组号,对应组号匹配的 字符串

    start():返回匹配开始的位置
    end():返回匹配结束的位置
    spend():返回一个元组包含匹配(开始,结束)的位置


    1、compile()
    编译正则表达式模式,返回一个对象的模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高一点效率)
    re.compile(pattern,flags=0)
    pattern:编译时用的表达式字符串。
    flags:编译标志位,用于修正正则表达式的匹配方式,如:是否区分大小写,多行匹配等,常用的flags有:

    re.S(DOTALL):使‘.’特殊字符匹配任何字符,包括换行;如果没有此标志,‘.’将匹配任何内容除换行符。

    re.I(IGNORECASE):使匹配对大小写不敏感。

    re.L(LOCALE):做本地化识别(locale-aware)匹配

    re.M(MULTILINE):多行匹配,影响^和$

    re.X(VERBOSE):该标志通过给予更灵活的格式以便将正则表达式写的更易于理解

    re.U:根据Unicode字符集解析字符,这个标识影响w,W,,B

    2、match()
    决定re是否在字符串刚开始的位置匹配。
    注:这个方法并不是完全匹配。当pattern结束时若string还有剩余字符,仍然视为成功。想要完全匹配,可以在表达式末尾加上边界匹配符‘$’
    格式:re.match(pattern,string,flags=0)

    例:
    print(re.match('com','comwww.runcomoob').group())
    print(re.match('com','Comwww.runcomoob',re.I).group())

    >>com
    >>Com

    3、search()
    re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None
    格式:re.search(pattern,string,flags=0)

    例:
    print(re.search('dcom','4com5com').group())

    >>4com

    4,findall()
    re.findall遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。
    格式:
    re.findall(pattern,string,flags=0)
    例1:
    p=re.compile(r'd+')
    print(p.findall('h32h3jh2uhr23'))

    >>['32', '3', '2', '23']

    5、finditer()
    搜索string,返回一个顺序访问每一个匹配结果(match)对象的迭代器。找到re匹配的所有字符串,并把它们作为一个迭代器返回。
    格式:
    re.finditer(pattern,string,flags=0)
    例:
    iter=re.finditer(r'd+','12gjh232jkg34')
    for i in iter:
    print(i)
    print(i.group())
    print(i.span())
    #返回迭代器对象;匹配数值;位置
    >><_sre.SRE_Match object; span=(0, 2), match='12'>
    12
    (0, 2)
    >><_sre.SRE_Match object; span=(5, 8), match='232'>
    232
    (5, 8)
    >><_sre.SRE_Match object; span=(11, 13), match='34'>
    34
    (11, 13)

    6、split()
    按照能够匹配的字符串string分割后返回列表。
    可以使用re.split来分割字符串,如:re.split(r's+',text);将字符串按空格分割成一个列表。
    格式:
    re.split(pattern,string,maxsplit=0,flags=0)
    例:
    print(re.split('d+','ont1two2three3four4five5',3))
    >>['ont', 'two', 'three', 'four4five5']

    7、sub()
    使用re替换string中每个匹配的字符串返回后的值。
    格式:
    re.sub(pattern,repl,string,count)
    例:
    text='ont1two2three3four4five5'
    print(re.sub(r'd+',' ',text))
    >>ont two three four five

    8、subn()
    返回替换次数
    格式:
    subn(pattern,repl,string,count=0,flags=0)
    例:
    print(re.subn(r'd',' ','ont1two2three3four4five5'))
    >>('ont two three four five ', 5)

  • 相关阅读:
    Django的是如何工作的
    Robot Framework自动化测试(五)--- 开发系统关键字
    Swarm 如何存储数据?- 每天5分钟玩转 Docker 容器技术(103)
    如何滚动更新 Service?- 每天5分钟玩转 Docker 容器技术(102)
    Service 之间如何通信?- 每天5分钟玩转 Docker 容器技术(101)
    神奇的 routing mesh
    如何访问 Service?- 每天5分钟玩转 Docker 容器技术(99)
    Swarm 如何实现 Failover?- 每天5分钟玩转 Docker 容器技术(98)
    如何实现 Service 伸缩?- 每天5分钟玩转 Docker 容器技术(97)
    运行第一个 Service
  • 原文地址:https://www.cnblogs.com/chen-1054425078/p/10072699.html
Copyright © 2011-2022 走看看