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等适应本土语言

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

  • 相关阅读:
    HDU 1025 Constructing Roads In JGShining's Kingdom (DP+二分)
    HDU 1158 Employment Planning
    HDU 2059 龟兔赛跑
    Csharp 简单操作Word模板文件
    Csharp windowform datagridview Clipboard TO EXCEL OR FROM EXCEL DATA 保存datagridview所有數據
    Csharp 讀寫文件內容搜索自動彈出 AutoCompleteMode
    Csharp windowform controls clear
    CSS DIV大图片右上角叠加小图片
    Csharp DataGridView自定义添加DateTimePicker控件日期列
    Csharp 打印Word文件默認打印機或選擇打印機設置代碼
  • 原文地址:https://www.cnblogs.com/xiao3c/p/7087936.html
Copyright © 2011-2022 走看看