• Linux 正则表达式和通配符 以及Python断言


    通配符

    通配符通常用来匹配文件、目录

    *

    匹配任意长度的任意字符,可以是0个

    ?

    匹配任意单个字符,必须是1个

    [ ]

    匹配指定字符范围内的任意单个字符

    [a-z,A-Z,0-9]

    匹配所有数字字母,可以不加逗号

    [a-z]

    表示取a..z的所有字符

    [A-Z]

    表示A,B.....Z

    [a-Z]

    表示所有大小写字母

    [:upper:]

    所有大写字母

    [:lower:]

    所有小写字母

    [:alpha:]

    所有字母,大小写

    [:digit:]

    所有数字

    [:alnum:]

    所有数字和字母

    [:space:]

    空白字符

    [:punct:]

    标点符号

    [^]

    匹配指定字符范围外的任意单个字符  同[!]

    [^0-9]

    相当于[^[:digit:]]

    [^a-z]

    所有非a..z的字符

    [^A-Z]

    所有非A..Z的字符

    正则表达式

    概述

    正则表达式Regular Expression,缩写RE,是文本处理极为重要的技术,用它可以对字符串按照某种规则进行检索、替换。正则表达式应用极其广泛,shell中文本处理命令、各种高级编程语言都支持正则。

    分类

    1、BRE

    基本正则表达式,grep、sed等都支持。

    2、ERE

    扩展正则表达式,egrep(grep -E)、sed -r等。

    3、PCRE

    几乎所有高级语言都是PCRE的方言或变种。

    元字符metacharacter

    代码 说明 举例

    Basic

    RegEx

    Extend

    RegEx

    Python
    . 匹配除换行符以外的任意一个字符 . . . .
    [abc] 字符集合,匹配集合中的任意一个字符 [abc]匹配plain中的'a' [abc] [abc] [abc]
    [^abc] 字符集合,只能表示一个字符位置。
    匹配除去集合内字符的任意一个字符
    [^abc]可以匹配plain中的'p','l','i','n' [^abc] [^abc] [^abc]
    [a-Z] 自付范围,也是集合,表示一个字符位置
    匹配包含的任意一个字符
    常用的有[A-Z][0-9] [a-Z] [a-Z] [a-Z]
    [^a-Z] 字符范围,也是个集合,表示一个字符位置
    匹配去除集合内字符的任意一个字符
      [^a-Z] [^a-Z] [^a-Z]
     匹配单词边界 b在文本中查找以b开头的字符   
    B 不匹配单词边界 tB包含t的单词但是不以t结尾的t字符,例如write
    Bb不以b开头但含有b的单词,如able
    B B B
    匹配一个横向制表符   不支持 不支持  
    v 匹配一个垂直制表符   不支持 不支持  
    s 匹配1位空白字符,包括换行符、制表符、空格
    [f v],f表示换页,v表示垂直制表符
      不支持 不支持  
    S 匹配一位非空白字符   不支持 不支持  
    d 同[0-9],匹配一位数字 d 不支持 不支持  
    D 同[^0-9],匹配一位非数字   不支持 不支持  
    w 匹配[a-zA-z0-9_],包含中文 w w w w
    W 匹配w之外的字符   W W W
    <pattern> <词首锚定,>词尾锚定,这两个和相同 <abc>匹配单词abc等价abc      

    单行模式

    . 点号可以匹配所有字符,包括换行符

    ^ 表示整个字符串的开头,$表示结尾

    多行模式

    .点号可以匹配所有字符,但不包括换行符

    ^ 表示整个字符串的开头,$表示结尾,开始指的是 后紧接着下一个字符,结束指的是 前的字符

    重复

    代码 说明 举例
    * 表示前面正则表达式匹配的内容
    会重复0次或多次
    ew*单词中有e,后面是非空白字符
    + 表示前面正则表达式重复至少1次 ew+单词中e后面至少有一个非空白字符
    表示前面的正则表达式会重复0次或1次 ew?单词e后至多有一个非空白字符
    {n} 重复n次  
    {n,} 重复至少n次

    ew{1,}等价ew+

    ew{0,}等价ew*

    ew{0,1}等价ew?

    {n,m} 重复n到m次 ew{1,10}单词中e后面至少一个最多10个非空白字符

     

    分组捕获、断言、注释(python)

    代码 说明 举例
    x|y 匹配x或匹配y w|food 或者 (w|f)ood
    捕获    
    (pattern)

    使用小括号指定一个子表达式,也叫分组

    捕获后会自动分配组号,从1开始,可以改变优先级

     
    数字 匹配对应的分组 (very)1表示匹配 very very,分组是very
    (?:pattern) 如果仅仅为了改变优先级,不需要捕获分组

    (?:w|f)ood

    'industr(?:y|ies)' 等价 'industry|industries'

    (?<name>exp)或
    (?'name'exp)

    分组捕获,但是可以通过那么访问分组,

    Python语法必须是(?P<name>exp)

     
    零宽断言    
    (?=exp)

    零宽度正预测先行断言

    断言exp一定出现在匹配字符的右边

    也就是说匹配字符的后面一定有exp

    f(?=ood)f后面一定有ood出现
    (?<=exp)

    零宽度正回顾后发断言

    断言exp一定出现在匹配字符的左边

    也就是说匹配字符前面一定有exp

    (?<=d{3})o{1,2}p表示匹配oop的字符串前面一定有三个数字
    负向零宽断言    
    (?!exp)

    零宽度负预测先行断言

    断言exp一定不会出现在右侧,

    也就是说断言后面一定不是exp

    d{3}(?!d)表示匹配3位数字且三位数字后 一定不是数字

    foo(?!d)表示foo的后面一定不是d

    (?<!exp)

    零宽度负回顾后发断言

    断言exp一定不会出现在左侧,

    也就是说断言前面一定不是exp

    (?<!f)ood表示ood的前面一定不是f

    注释    
    (?#comment) 注释 f(?=oo)

    贪婪与非贪婪

     

    代码 说明
    *? 匹配任意次,但尽可能少重复
    +? 匹配至少1次,尽可能少重复
    ?? 匹配0或1次,尽可能少重复
    {n,}? 匹配至少n次,尽可能少重复
    {n,m}? 匹配至少n次,至多m次,尽量少匹配
  • 相关阅读:
    Laravel kalnoy/nestedset
    Eloquent Subquery Enhancements in Laravel 6.0
    Laravel 6.0 中更加强劲的子查询
    Es6系列之module and class
    Using Laravel's Bootable Eloquent Traits
    Google Chrome Shortcut Keys
    另辟蹊径:vue单页面,多路由,前进刷新,后退不刷新
    docker-machine 创建主机的缺省密码 (Default User and Password)
    eslint Cannot read property 'range' of null错误( Quasar Doc )$ quasar dev 出错
    java比较排序Comparable和Comparator
  • 原文地址:https://www.cnblogs.com/zh-dream/p/12392911.html
Copyright © 2020-2023  润新知