正则

正则

  • 匹配规则

    模式匹配内容
    \w匹配字母,数字,下划线
    \W与\w相反
    \s匹配空字符 <==> [\t\n\r\f]
    \S与\s相反
    \d匹配数字 <==> [0-9]
    \D匹配非数字
    \A匹配字符串开头
    \Z匹配字符串结尾, 如果存在换行,只匹配到换行前的结束字符串
    \z匹配字符串结尾,如果存在换行,同时还会匹配换行符
    \G匹配最后匹配完成的位宣
    \n匹配一个换行符
    \t匹配一个制表衔’
    ^匹配一行字符串的开头
    $匹配一行字符串的结尾
    .匹配任意字符,除了换行符,当 re.DOTALL 标记被指定时,则可以匹配包括换行符的任意字符
    [ …]用来表示一组字符,单独列出 , 比如[ amk ]匹配 a 、 m 或 k
    [^…]不在[]中的字符,比如(’ abc ]匹配除了 a 、 b 、 c 之外的字符
    *匹配 0 个或多个表达式
    +匹配 1 个或多个表达式
    ?匹配 0 个或 l 个前面的正则表达式定义的片段,非贪婪方式
    {n}精确匹配 n 个前面的表达式
    {n, m}匹配 n 到 m 次由前面正则表达式定义的片段,贪婪方式
    alb匹配 a 或 b
    ()匹配括号内的表达式,也表示一个组
  • match

    import re
    
    content = 'Hello 123 4567 World_This is a Regex Demo'
    result = re.match(r'^Hello\s(\d{3})\s(\d{4})\s\w{10}', content)
    print(result.group())  # 返回匹配到的内容  Hello 123 4567 World_this
    # 匹配目标
    print(result.group(1))  # 123
    print(result.group(2))  # 4567
    print(result.span())  # 返回匹配位置(0, 25)
    

    通用匹配

    """
    .*对任意字符匹配无限次
    """
    re.match(r'^Hello.*Demo$', content)
    

    贪婪与非贪婪

    """
    .* 为贪婪匹配
    .*? 为非贪婪匹配
    匹配时
    	字符串中间: 尽量少的匹配,使用 .*? 非贪婪匹配,以免匹配结果缺失
    	字符串结尾: 尽量多的匹配,使用 .* 贪婪匹配, 以免结果缺失
    """
    re.match(r'^He.*(\d+)', 'Hello 1234 World').group(1)  # 结果为 4
    re.match(r'^He.*?(\d+)', 'Hello 1234 World').group(1)  # 结果为 1234
    re.match(r'^He.*?(\d+).*?', 'Hello 1234 World').group()  # 结果为 'Hello 1234'
    re.match(r'^He.*?(\d+).*', 'Hello 1234 World').group()  # 结果为 'Hello 1234 World'
    

    修饰符

    """
    . 匹配任意非换行字符, re.S修饰符可以让 . 也匹配换行符
    """
    content = """Hello 123 4567 World_This is a 
    Regex Demo"""
    re.match(r'^He.*?(\d+).*Demo$', content).group(1)  # 报错
    re.match(r'^He.*?(\d+).*Demo$', content, re.S).group(1) # '123'
    
    修饰符作用
    re.I使匹配对大小写不敏感
    re.L做本地化识别
    re .M多行匹配,影响^和$
    re.S使 . 匹配包括换行在内的所有字符
    re.U根据 Unicode 字符集解析字符 。 这个标志影响 \w 、\W 、\b 和\B
    re.X该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解

    常用的是 re.S 和 re.I

    转义匹配

    ​ 当要匹配与正则冲突的字符时, 用\转义

    ​ eg: r'\(百度\)www\.baidu\.com' 此处()与.就需要转义

  • search()

    """
    re.match()  # 匹配时,从头匹配
    re.search()  # 匹配时,扫换整个字符串,返回第一个匹配成功的结果,没有则返回None
    	注意: 用search()时, 加上修饰符 re.S
    """
    
  • findall()

    """
    re.findall()  # 返回所有多个匹配结果, search只返回一个
    返回值为一个元组
    """
    
  • sub()

    """
    re.sub()  # 修改文本
    返回值为一个字符串
    """
    re.sub(r'\d+', '', 'hello 123 world 456')  # 'hello world'
    
  • compile()

    """
    compile()  # 将正则编译成正则表达式对象, 方便复用
    """
    pattern = re.compile('\d{2}:\d')
    result = re.match(pattern, '13:3')
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值