美文网首页Python全栈工程师
24.1-正则表达式元字符和重复

24.1-正则表达式元字符和重复

作者: BeautifulSoulpy | 来源:发表于2019-10-18 10:04 被阅读0次

    把美丽作为一种人生态度,自信、自律,保持初心,感知美好,让美丽由内而外的盛放!

    正则表达式是必备技能之一

    正则表达式难学在于没有吧那些例子吃透,

    总结:

    1. win下换行符可能是 回车换行符 \r\nCR|LF
    2. 一旦扫描绝不回头;不会重叠匹配123 \d\d -12;

    正则表达式 Regular Expression

    正则表达式 Regular Expression,缩写regex、regexp、RE等;

    当今计算机主要是处理文本和数据(至少目前是这样的),特别是在Web兴起之后,开发任务中的有一大堆都是对字符串的处理.

    1.什么是正则表达式

    正则表达式,就是一种描述字符串结构模式的形式化表达方式.正则表达式它简单,优美,功能强大,妙用无穷.

    正则表达式主要是用来处理文本,或者准确说是处理对象序列,对于很多实际工作来说,可以成百倍的提高开发效率和程序质量.

    有的同学也许会说,正则表达式不是很复杂吗,就正则本身来说,它的规则并不复杂,但是组合起来就复杂了,不然也不会威力无穷啊,所以学的话最好从本质入手,才能真正掌握正则的奥秘.

    2.正则表达式分类

    • BRE:基本正则表达式,grep、sed、vi 等软件支持,vim 有拓展;
    • ERE:扩展正则表达式,egrep(grep -E)、sed -r 等;
    • PCRE:几乎所有高级语言都是PCRE的变种,python从106开始使用SRE正则引擎,可以认为是PCRE的子集,见模块re;

    3.正则表达式进行匹配的流程

    依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。


    4. 基本语法

    元字符 matacharacter(一个字符)

    对于PCRE的多种变种,元字符在每一种 编程语言中 都是基本一致的,
    \b是一个例外,指的是单词的边界;

    元字符 每次匹配一个字符;元字符可以组合 \d\d\d
    一旦扫描绝不回头;不会重叠匹配123 \d\d -12;

    代码 说明 举例
    . 匹配除换行符外任意一个字符 . win下换行符可能是 回车换行符 \r\n
    [abc] 字符集合,只能表示一个字符位置。匹配所包含的任意一个字符 [abc]匹配plain中的'a'
    [^abc] 字符集合,只能表示一个字符位置。匹配除去集合内字符的任意一个字符 [^abc]可以匹配plain中的'p'、'l'、'i'或者'n'
    [a-z] 字符范围,也是个集合,表示一个字符位置,匹配所包含的任意一个字符 常用[A-Z][0-9]
    [^a-z] 字符范围,也是个集合,表示一个字符位置,匹配除去集合内字符的任意一个字符
    \b 匹配单词的边界 \bb 在文本中找到单词中b开头的b字符
    \B 不匹配单词的边界 t\B 包含t的单词但是不以t结尾的t字符,例如write \Bb不以b开头的含有b的单词,例如able
    \d [0-9]匹配一位数字 \d
    \D [^0-9]匹配一位非数字
    \s 匹配1位任何空白字符,包括制表符、换行符、空格 如 [\t\n\r\f\v]
    \S 匹配1位非空白字符
    \w 匹配[a-zA-Z0-9_]任何大小写字母, 数字和 包含中文的字; 不匹配符号,。.
    \W 匹配\w之外的字符 (匹配 符号,空格、换行符、回车符)
    [...] 用来表示一组字符,单独列出,比如[amk]匹配a、m或k
    [^...] 不在[]中的字符,比如[^abc]匹配除了a、b、c之外的字符
    \Z 匹配字符串结尾,如果存在换行,只匹配到换行前的结束字符串
    \z 匹配字符串结尾,如果存在换行,同时还会匹配换行符
    \G 匹配最后匹配完成的位置
    \n 匹配一个换行符
    \t 匹配一个制表符
    字符集合[]
    [1111111]   [1]
    [abbbbbbbb]   [ad]
    [0-2]   [0]、[1]、[2]
    
    转义

    凡是在正则表达式中他有特殊意义的符号,如果想使用它的本意,请使用\转义
    反斜杠自身吗,得使用\\

    重复

    前面重复多少次的问题;

    代码 说明 举例
    * 表示前面的正则表达式会重复0次或多次 e\w* 单词中e后面可以有非空白字符
    + 表示前面的正则表达式重复至少1次 e\w+ 单词中e后面至少有一个非空白字符
    表示前面的正则表达式会重复0次或1次 e\w? 单词中e后面至多有一个非空白字符
    {n} 重复固定的n次 e\w{1} 单词中e后面只能有一个非空白字符
    {n,} 重复至少n次 e\w{1,} 等价 e\w+、e\w{0,} 等价 e\w*、e\w{0,1} 等价 e\w?
    {n,m} 重复n到m次 e\w{1,10} 单词中e后面至少1个,至多10个非空白字符

    练习:

    1. 匹配手机号码:字符为"手机号码13851888188。"
    1[0-9]{10}   1\d{10}
    以13开头的:  (13|17)\d{9}
    
    
    2. 匹配中国座机:字符串为"号码为025-83105736、0543-5467328。"
    \d{3,4}-\d{7,8}
    
    

    相关文章

      网友评论

        本文标题:24.1-正则表达式元字符和重复

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