python 学习第十二天(re模块)

re模块

  • 功能
    做模糊匹配
  • 元字符
元字符 功能
. 匹配除了换行符以外的任意字符
^ 从字符串首位匹配。书写时必须写在首位,否则匹配为空
$ 从字符串末尾匹配。书写时必须写在末尾,否则匹配为空
* 重复匹配任意多次(包括0次)
+ 重复匹配任意多次(不包括0次)
? 匹配0次或1次
{n} n是一个非负整数。匹配确定的n次
{n,} 至少匹配n次
{n,m} m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次
[xyz] 字符集。匹配字符集中任何一个字符,除注释1的字符.(注释1)
\ 反斜杠。使元字符失去特殊功能;使部分普通字符实现特殊功能(注释2)。
( ) 将( ) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域。(注释3)
| 将两个匹配条件进行逻辑“或”(Or)运算
  • 注释1
    1. -在[]里表示范围,比如[a-z]表示匹配a到z中的任意一个字符。 如果此时还需要匹配 - ,那么再在 [ ]里面加一个-(加在前后都可以),比如[a-z-],这时候就能匹配到 - 。
    2. ^ 则表示取反的意思。比如 [^a,b] 表示除了 a , b(注意:这里的’,’也是一个字符,没有其他的意义) 以外所有的字符都匹配(包括换行符)
    3. \在[]中还是有元字符的意义
 import re
 print(re.findall('a[1-9-]+','a1999-9'))  # ['a1999-9']
  • 注释2
    \d 匹配任何十进制的数,相当于 [0-9]
    \D 匹配任何非数字字符,相当于 [^0-9]
    \s 匹配任何空白字符,相当于 [ \t\n\r\f\v]
    \S 匹配任何非空白字符,相当于 [^ \t\n\r\f\v]
    \w 匹配任何字母和数字字符,相当于 [0-9a-zA-Z]
    \W 匹配任何非字母和数字字符,相当于 [^0-9a-zA-Z]
    \b 匹配一个特殊边界(非任何字母和数字的都是特殊字符)
  • 注释3

import re

print(re.search('(?P<name>[a-z]+)(?P<age>\d+)','chengzhuo24zhuo25').group())    #chengzhuo24

print(re.search('(?P<name>[a-z]+)(?P<age>\d+)','chengzhuo24zhuo25').group('name')   #chengzhuo

print(re.search('(?P<name>[a-z]+)(?P<age>\d+)','chengzhuo24zhuo25').group('age'))   #24


#  (?P<>re)相当于给分组起名字,后面跟的内容才是要匹配的

print(re.findall('www\.(163|baidu)\.com','assadwww.baidu.comsfasfd'))
#['baidu']  这是因为优先显示分组的内容
print(re.findall('www\.(?:163|baidu)\.com','assadwww.baidu.comsfasfd'))
#['www.baidu.com']  (?:re)表示()不是一个分组
  • 注释4
    *+?{}都是贪婪匹配,加问号就可以变成惰性匹配

 import re

 print(re.findall('as+?','asssss'))          #['as']

 print(re.findall('as+','asssss'))         #['asssss']
  • 常用方法
    • re.findall(pattern,str)
      返回一个满足条件的所有结果的列表
    • re.search(pattern,str)
      返回一个对象,这个对象是满足条件的第一个匹配结果。取出匹配的字符串用这个对象的group()方法。
    • re.match(pattern,str)
      同search,但它只在字符串的开始匹配
    • re.split(pattern,str)
      分割
print(re.split('a|ac|b','nnnannnacnnnnbnnnannn'))
#['nnn', 'nnn', 'cnnnn', 'nnn', 'nnn']
    • re.sub()
      替换
print(re.sub('a|ac|b','Y','nnnannnacnnnnbnnnannn'))
# nnnYnnnYcnnnnYnnnYnnn
    • re.subn()
print(re.subn('a|ac|b','Y','nnnannnacnnnnbnnnannn'))
#('nnnYnnnYcnnnnYnnnYnnn', 4) 4是匹配到的次数
    • re.compile(pattern)
      返回一个规则对象
com=re.compile('[AV]+')
print(com.findall('AVjkhjjAhijkV'))
#['AV', 'A', 'V']
    • re.finditer()
      与findall()类似,但返回的是一个迭代器

猜你喜欢

转载自blog.csdn.net/CZ505632696/article/details/81237303