python正则表达式

 

1、原子概念:

  原子是正则表达式中最基本的组成单位,每个正则表达式至少包含一个原子

  常见原子类型:

    普通字符,如a b c等

    非打印字符,如\n \t等

    通用字符,如\d, \D等

  常用的通用字符:

字符说明
\d  匹配一个数字字符,等价于[0-9]  
\D匹配一个非数字字符,等价于[^0-9]
\s匹配任何空白字符,包括空白,制表符,换行符等等, 等价于[\f\n\r\t\v]  
\S匹配任何非空白字符
\w匹配字母,数字,下划线,等价于[a-zA-Z0-9_]
\W匹配非字母,非数字,非下划线

 

 

 

 

 

 

 

 


2、元字符,就是正则表达式中具有一些特殊含义的字符

  常见的元字符有:

字符描述
.

匹配除了\n之外的任何字符

要匹配\n在内的字符,需要使用.|\n

[xyz]字符集合,匹配所包含的任意一个字符
[^xyz]负值字符集合,匹配未包含的任意一个字符
[a-z]匹配指定范围内的任意一个字符
*    匹配前面的子表达式 0 次或 多 次,如zo* 可以匹配z,zo,zoo等
+匹配前面的子表达式 1 次或 多 次,如zo+可以匹配zo,zoo但是不能匹配z
匹配前面的子表达式 0 次或 1 次, 如zo?可以匹配z,zo不能匹配zoo
{n}n是一个非负整数,匹配确定的n次
{n,}至少匹配n次,o{0,}等价于o*, o{1,}等价于o+,o{0,1}等价于o?
{n,m}最小匹配n次,最多匹配m次,
\将下一个字符标记为特殊字符,或一个原义字符,或一个向后引用,或一个八进制转义符
^匹配字符串的开始位置,如果设置了RegExp对象的Multiline属性, ^也匹配\n或\r之后的位置
$匹配字符串的结束位置,如果设置了RegExp对象的Multiline属性,^也匹配\n或\r之前的位置

如果是跟在其他任何一个限制符后面(*,+,?,{n},{n,m}等),匹配模式将变成非贪婪模式

非贪婪模式尽可能少的匹配所搜索的字符串,而贪婪模式尽可能多的匹配所搜索的字符串

如"oooo"中,o+将匹配所有o,o+?将只匹配一个o

x|y匹配x或y
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3、模式修正符

  在不改变正则表达式的情况下,通过模式修正符改变正则表达式的意义,从而实现一些匹配结果的调整

修饰符  描述  
re.I使匹配对大小写不敏感
re.S使 . 匹配包括换行在内的所有字符  
re.L做本地化识别匹配
re.M多行匹配,影响^和$
re.U根据Unicode字符集解析字符

 

 

 

 

 

 

 

 

 4、re模块

python中,通过re模块来实现正则匹配

re模块中常用的功能函数:

 1)compile()

   编译正则表达式模式,返回一个正则对象(可以把常用的正则表达式编译成正则表达式对象,这样可以提高效率)

    re.compile(pattern[, flags=0])

     pattern:编译时用的表达式字符串

     flags:编译标志位,用于修改正则表达式的匹配方式,如re.I 不区分大小写,re.S等

    import re

    tt = "Tina is a good girl, she is cool, clever..."

    pattern = r"\w*oo\w*"  # 查找包含oo的单词

    reg = re.compile(pattern)

    reg.findall(tt)  # ['good', 'cool']

 2)match()

    决定re是否在字符串开头位置匹配

    re.match(pattern, string[, flags])

    print(re.match("www", "www.baidu.com").group)  # www

    print(re.match("www", "WWW.BAIDU.COM", re.I).group())  #WWW

   3)search()

    re.search(pattern, string[, flags])

    search()会在字符串内查找匹配,如果找到第一个匹配的,就返回,如果没有找到就返回None

    match和search一旦匹配成功,就是一个match object对象,match object对象有以下方法:

      group():返回被re匹配的字符串

      start():返回匹配开始的位置

      end():返回匹配结束的位置

      span():返回一个包含开始,结束位置的元组

     

   4)findall()

    遍历查找所有匹配的元素,以列表形式返回

    re.findall(pattern, string[, flag])

    

  5)finditer()

    re.finditer(pattern, string[, flags])

    搜索string,找到re匹配的所有的子串,并把它们作为迭代器返回,返回的结果是由所有匹配的match对象组成的迭代器

    

  6)split()

    按照能够匹配的子串将string分割后,返回的列表

    re.split(pattern, string[, flag])

    如下,按照空白字符分割字符串,返回列表

    

    按数字分割字符串,返回列表

    

  7)sub()

    re.sub(pattern, rep1, string, count)

      pattern:匹配的正则表达式

      rep1:替换的新的字符串

      string:原始字符串

      count:指定替换次数,默认为0,表示都替换。

    

     sub() 还允许使用函数对匹配项进行复杂的处理,如下,把字符串中所有数字替换后(数字+1)

    

  8)subn()

    返回替换后的结果和替换的次数,以元组形式返回

    re.subn(pattern, rep1, string ,count=0, flags)

    

5、re模块中re.match(), re.search(), re.findall()的区别

  re.match()只在字符串开始位置进行匹配,如果不匹配就返回None

  re.search()遍历整个字符串,找到第一个匹配项就返回

  re.findall()遍历整个字符串,找到所有的匹配项并以列表形式返回

  

 

 

 

  

 

转载于:https://www.cnblogs.com/fiona-zhong/p/10180498.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值