zoukankan      html  css  js  c++  java
  • 正则表达式详解

    常见的正则匹配模式

    在这里插入图片描述

    最常规的匹配

    #re.match() 尝试从字符串的起始位置匹配一个模式,
    如果不是起始位置匹配成功的话,match()就返回none. re.match(patter,string,flags=0) 

    content = 'Hello 123 4567 World_this is a Regex Demo'
    print(len(content))
    
    result = re.match('^Hellosdddsd{4}sw{10}.*Demo$',content)
    print(result.group()) #查看匹配到的字符
    print(result)
    print(type(result))

    泛匹配

    content = 'Hello 123 4567 World_this is a Regex Demo'
    result = re.match('^Hello.*Demo$',content)
    print(result.group)
    print(result.span)
    print(result)

    匹配目标

    content = 'Hello 1234567 World_this is a Regex Demo'
    result = re.match('^Hellos(d+)sWorld.*Demo$',content)
    print(result.group)
    print(result.span()) #result.span()方法返回的是匹配到的字符串的起始下标位置和结束位置
    print(result)

    #贪婪模式

    content = 'Hello 1234567 World_this is a Regex Demo'
    result = re.match('^He.*(d+).*Demo$',content)
    print(result)
    print(result.group(1))

    非贪婪匹配

    content = 'Hello 1234567 World_this is a Regex Demo'
    result = re.match('^He.*?(d+).*Demo$',content)
    print(result.group(1))

    匹配模式

    content = '''Hello 1234567 World_this 
    is a Regex Demo'''
    result = re.match('^He.*?Demo$',content,re.S)  #re.S指明换行兼容匹配模式
    print(result.group)

    转义

    content = 'price is $500.00'
    result = re.match('^p.*$d+.d+',content)
    print(result)

    re.search

    **#扫描整个字符串并返回第一个成功的匹配。 **
    
    content = 'Hello 1234567 World_this is a Regex Demo'
    result = re.search('^H.*?(d+).*?Demo$',content)
    print(result.group(1))
    # re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;
    而re.search匹配整个字符串,直到找到一个匹配。 匹配成功re.search方法返回一个匹配的对象,否则返回None

    re.sub

    替换字符串中每一个匹配的子串后返回替换后的字符串

    # re 模块提供了re.sub用于替换字符串中的匹配项。
    re.sub(pattern, repl, string, count=0, flags=0)
    content = 'Hello 1234567 World_this is a Regex Demo'
    content = re.sub('d+','',content)  #相当于字符串替换 
    # 第一个参数传入要替换掉的字符串的正则表达式,第二个参数传入要替换的结果。
    print(content)
    
    #     pattern : 正则中的模式字符串。
    #     repl : 替换的字符串,也可为一个函数。
    #     string : 要被查找替换的原始字符串。
    #     count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

    re.compile() 将正则格式的字符串编译成正则表达式对象,以便于复用该匹配模式。

    content = '''Hello 1234567 World_this 
    is a Regex Demo'''
    patter = re.compile('^H.*Demo$',re.S)
    result = re.match(patter,content,)
    print(result)

    re.findall (pattern,str)或者pattern.findall(str)

    # 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
    #match 和 search 是匹配一次 ;findall 匹配所有

    # 语法格式为:  findall(pattern,string, satrtpos, endpos)
    #     string : 待匹配的字符串。
    #     pos : 可选参数,指定字符串的起始位置,默认为 0。
    #     endpos : 可选参数,指定字符串的结束位置,默认为字符串的长度。
    pattern = re.compile(r'd+')   # 查找数字
    result1 = pattern.findall('runoob  123 google 456')
    result3 = re.findall(pattern,'runoob  123 google 456')
    
    result2 = pattern.findall('run88oob123google456', 0, 10)
    print(result1)
    print(result3)

    split(pattern, string, maxsplit=0, flags=0)分隔

    split 方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:

     re.split(pattern, string, maxsplit=0, flags=0)

    参数说明: pattern 要匹配的正则表达式; string 要匹配的字符串;maxsplit分割次数,等于1时表示分隔一次,默认0不限制次数。
    flags 可选标志位,用来控制匹配方式

    一些 Tips

    1.模式字符串使用特殊的语法来表示一个正则表达式:

    2.字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。

    3.多数字母和数字前加一个反斜杠时会拥有不同的含义。

    4.标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。

    5.反斜杠本身需要使用反斜杠转义。
    在这里插入图片描述

  • 相关阅读:
    解决无法安装Microsoft .Net Framework 3.5
    day11-15,装饰器
    Xmanager Power Suit 6.0.0009 最新版注册激活
    eth
    MySql 8.0 版本使用navicat连不上解决
    day11
    Mybatis使用规则
    nginx的基本配置
    Mybatis分页插件PageHelper使用
    dubbo的使用
  • 原文地址:https://www.cnblogs.com/chenruhai/p/12464233.html
Copyright © 2011-2022 走看看