zoukankan      html  css  js  c++  java
  • 正则表达式,以python为例

    转载需注明原文地址和作者两项内容。

    正则表达式目的是能够快速处理字符串内容,主要用于找出指定的字符串,配合其他操作完成任务。
    使用正则表达式时要了解自己语言的特性,python中的正则表达式默认情况是贪婪模式,也就是不限制的情况下会尽可能多得匹配字符串。

    不同的语言实现的方式不一样,一个特性的地方要注意。

    0x00 基础语法

     1 .:匹配除换行符以外的任意字符
     2 s:匹配任意的空白符
     3 d:匹配数字
     4 D:匹配任何的非数字,等价于[^0-9]
     5 :匹配单词的分界线
     6 B:匹配一个单词的非分界线
     7 ^:匹配字符串的开始
     8 $:匹配字符串的结束
     9 w:匹配包括下划线的任何单词字符.类似但不等价于“[A-Za-z0-9_]”,Unicode字符集,能不能匹配汉字要视应用环境而定
    10 W:匹配任何非单词字符.等价“[^A-Za-z0-9_]”
    11 :转义,其后字符不作表达式解释
    12 *:匹配*前面的字符0次或n次,等价于{0,}
    13 +:匹配+号前面的字符1次或n次.等价于{1,}
    14 ?:匹配?前面的字符0次或1次,等价于 {0,1}
    15 (x):匹配’x’并记录匹配的值
    16 x│y:匹配表达式x或y
    17 {n}:匹配前面限定的字符n次
    18 {n,}:匹配前面限定的字符至少n次
    19 {n,m}:匹配前面限定的字符n-m次均可
    20 [xyz]:单字符列表,匹配括号中的任一字符.可用连字符‘-’指出字符范围
    21 [^xyz]:单字符列表的补集,匹配除了列出字符外的,同样可指出字符范围
    22 f:匹配一个表单符
    23 
    :匹配一个换行符
    24 
    :匹配一个回车符
    25 s:匹配一个单个white空格符,包括空格,tab,form feed,换行符,等价于[ fnrtv]
    26 S:匹配除white空格符以外的一个单个的字符,等价于[^ fnrtv]
    27 t:匹配一个制表符
    28 v:匹配一个顶头制表符
    29 :将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符

    0x01 python正则模块
    import re
    导入python正则表达式模块

    re.compile(str)
    用于将字符串型的正则表达式编译成一个正则表达式对象,可以直接使用对该对象使用re的方法。
    返回pattern

    re.findall(pattern,str)
    将字符串按照正则表达式进行处理,第一个参数是匹配的正则规则,可接收pattern和字符串型的正则表达,第二个是待处理的字符串。
    返回list

    re.sub(pattern, replace, string, count)
    将字符串中正则表达式匹配到的内容替换成指定的内容。
    第二个函数是用于替换的字符串
    第四个参数指替换个数。默认为0,表示每个匹配到的内容都替换。
    返回str
    re.sub还允许使用函数对匹配项的替换进行复杂的处理(参数2)。如:re.sub(r's', lambda m: '[' + m.group(0) + ']', text, 0);将字符串中的空格' '替换为'[ ]'。

    re.split(pattern,str)
    用于以正则匹配到的内容作为分隔符,分割字符串。
    返回list

    re.match(pattern, string, flags)
    尝试从字符串的开始匹配,字符串的起始处不符合正则表达式,则匹配失败。
    成功返回match,失败返回None。
    (内容可以用group()方法查看。)
    第三个参数是标致位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

    re.search(pattern, string, flags)
    在整个字符串内匹配查找,找到第一个匹配然后返回,如果字符串没有匹配,则返回None。
    参数同re.match。
    成功返回match,失败返回None。

     上述pattern也可以用str型的字符串替换,效果相同。

    .groups()对象包括了正则表达式匹配到的所有的内容。

    .group()是groups()中的一个对象。

     python的findall可以使用()圈定取出的范围,比如要匹配文字src=“/xxx.jpg”中的xxx,正则表达式可以这么写src="(.+).jpg)",最后直接返回结果为xxx。

    0x02 栗子


    IPv4地址

    d{1,3}.d{1,3}.d{1,3}.d{1,3}

    URL(同时也是一个最小的非贪婪匹配栗子)

    http://.*?/

    匹配文件后缀

    .*.php

    匹配行首空格

    ^s

    匹配同一单词不区分大小写

    [Tt]ools

     0x03 python正则中特殊控制标记

    python正则表达式模块中的函数支持使用特殊的控制标记来做一些微调。这些控制标记通常作为参数传入。

    re.I

    字母不区分大小写的匹配

    re.X

    使用"""作为表达式的分割,可以写多行正则并且可以使用#进行行注释,编译时会忽略

    re.A

    选用ASCII字符匹配

    re.S

    使得.可以匹配换行符

    re.M

    使用后,^匹配字符串的开头以及每个行的开头(每个换行符后); $匹配字符串的末尾以及每一行的结尾(每个换行符前)。默认情况下,^只匹配字符串的开始,$只匹配字符串的末尾和字符串末尾换行符之前的位置。

    re.L

     wWBs , S等适应本土语言

    如有错误请留言指正,之后遇到更多情况会陆续补充。

  • 相关阅读:
    python K-means工具包初解
    Struts2学习笔记1
    北邮iptv用WindowsMediaplayer打不开的解决的方法
    数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
    Java中Queue类实现
    LinkedList
    android 自定义 radiobutton 文字颜色随选中状态而改变
    Android自定义radiobutton(文字靠左,选框靠右)
    Android进阶2之APK方式换肤
    Android APK方式换肤实现原理
  • 原文地址:https://www.cnblogs.com/xiao3c/p/7087936.html
Copyright © 2011-2022 走看看