zoukankan      html  css  js  c++  java
  • 正则从接触到放弃

    正则重要!正则重要!正则重要!

     

    一丶字符组


    普通字符组

    概念:字符组是正则表达式最基本结构之一,顾名思义,字符组就是一组字符

    功能:表示在正则表达式中,在同一个位置可能出现的各种字符

    分类:字符可以分为很多类,比如数字丶字母丶标点等.

    例如:

    简单字符组,[ab]、[314]、[#.?]在解决常用问题时,可以简化大大操作

    注:perl语言是正则表达式处理最方便的语言

    python基础知识

    import re

    (1)re.search(正则表达式,要匹配的字符串):找到字符中是否有要匹配的值,返回一个MatchObject对象,包含匹配信息,用group[索引]方法提取数据,有则返回True,否则False
    (2)re.findall(正则表达式,要匹配的字符串):返回一个数组,其元素在字符串中依次寻找的目标文本

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

    (3)
    ^定位到字符串起始位置
    $定位到字符串结束位置


    普通字符组(续)


    字符组中的字符排列顺序不影响字符组的功能,出现重复字符也不影响字符组的功能

    所以[0123456789]完全等价于[9876543210]丶[1029384756]丶[998887654123]

    范围表示法range,[0-9]等于[123456789]等于[123789456]
    码值小的在前,码值大的在后.所以[0-9]合法[9-0]非法

    补充:码值问题
    0~9是48~57 a~z是97~122,A~Z是65~90

    xhex表示一个字符,其中x是前缀,如x41表示字符A,A的码值是41(十进制为65)

    不推荐[0-Z]这样不好阅读.不好理解
    例子:

    匹配十六进制,十进制字符

    [0-9a-fA-F]

    判断ASCII字符

    [x00-x7F]

    元字符与转义


    元字符:字符组中的横线"-"不表示横杠而表示的是范围,这类字符叫元字符,在匹配中元字符有特殊的意义

    元字符的种类:

    横线       -
    开方括号[ 需要转义
    闭方括号] 不需要转义
    所有开头^
    所有结尾$

    匹配任意字符 . (数字字母各种符号)但换行符点号不能匹配

    元字符的转义:有时候不需要特殊的意义,这就用到元字符的转义了

    在元字符前加上反斜线字符用来转义

    位置不同意义不同

    [-09]代表-,0,9

    [0-9]代表数字0~9

    [-0-9]代表数字0~9和横线-


    原生字符串r"string":字符串中会被认为是转义序列,使用\等于\,等一系列麻烦的问题都会通过r" "解决

    r"^[0-9]$"=="^[0\-9]$"

    排除型字符组
    排除字符组:[^]除了范围内的字符

    注意:看似简单的排除字符组,新手常常会犯一个错误,把"在当前位置匹配一个没有列出的字符",理解为"在当前位置不要匹配列出的字符"后者不出现字符也可以.
    所以排除型字符组必须要匹配一个字符

    字符组简记法


    用[0-9]和[a-z]可以很方便的表示数字字符和小字母字符,这类常用的字符组,正则表达式提供了更简单的记忆法,这就是字符组简记法
    常见字符组简记法为:
    .匹配任意字符,但除了换行符
    d匹配所有数字[0-9]
    w匹配所有数字,字母或下划线[0-9a-zA-Z]
    s匹配所有空白[ vf] 空格,制表,回车,换行
    与上面互补
    D
    W
    S

    互补则匹配任意字符如:[dD]

    补充:
    字符组中出现了字符组简记法,最好不要出现单独的-
    dws都是针对ASCII码而言的匹配规则.但目前有的语言已经支持了Unincode

    二丶量词


    一般的形式


    例如{6}重复六次的量词表达
    {m,n}m下限,n上限

    {n}之前元素必须出现n次
    {m,n}之前的元素最少出现m次,最多出现n次
    {m,}之前元素最少出现m次,最多出现次数无上限
    {0,n}之前的元素可以不出现,也可以出现,最多出现n次


    常用的量词


    {m,n}是通用形式的量词
    + {1,}至少出现一次,出现次数没有上限
    ? {0,1}出现1次,也可能不出现
    * {0,}可能出现,也可能不出现,出现次数没有上限

    匹配标签字符

    匹配所有标签r"<[^>]+>"

    匹配开标签]r''<[^/] [^>]*>''

    匹配闭标签r"</[^>]+>"

    匹配半开标签r"<[^>+/]>"

    匹配双引号字符r" "[^"]*" "

    数据提取

    除去验证,还可以从某个字符串中提取出某个字符串能匹配的所有文本

    ret = findall(r"d{6}","cangshu:202020,cangshu:202020")找出匹配的数据以数组返回结果[''202020'',"303030"]

    for i in ret: i的值为202020    303030

    点号

    .匹配任何字符

    .*表示匹配长度没有限制(贪婪匹配或者叫匹配优先量词),不确定匹配时优先匹配,再尝试表达式之后的元素

    .?表示(惰性匹配又叫忽略优先量词),不确定匹配时优先不匹配,再尝试表达式之后的元素,如果尝试失败则返回匹配

    转义

    {,n}

    *          *?

    ?         ??

    +         +?

    代表转义之前

    三丶括号

     分组

    ()用于分组将一组正则作为一个整体匹配,再用量词来限定

    例如身份证匹配

    15位身份证:[1-9]d{14}首位不为0其他14位数字随意

    15位或18位:[1-9]d{14}(d{2}[0-9x])?

     

    多选结构

    | 表示或者.有一个匹配就能成功.

    引用分组

    反向引用

    命名分组

    四丶断言

  • 相关阅读:
    前端精选文摘:BFC 神奇背后的原理
    Linux下关闭node应用
    CentOS7配置Nodejs环境安装记录
    Express4+Mongodb极简入门实例
    Centos7 防火墙设置
    如何解决Linux内网环境依赖问题
    Centos7 显卡驱动安装教程
    ios自动化WebDriverAgent测试报错
    Windows版sudo 以管理员发送运行CMD
    adb常用命令
  • 原文地址:https://www.cnblogs.com/cangshuchirou/p/9185136.html
Copyright © 2011-2022 走看看