欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python re模块学习笔记

程序员文章站 2022-07-09 23:07:14
...

re模块-正则


元字符 描述 举例 结果 分析
. 通配符, 匹配任意 1个 字符 re.findall(‘w..l’,‘hello world’) worl
^ 从头开始(行首)匹配 re.findall(’^h…o’,‘world hello’) [] 从开头匹配h
$ 以结束 匹配 re.findall(‘h…o$’,‘hello world’) [] 以o结尾匹配 h…o
* 重复匹配 0或多次 re.findall(‘e.*d’,‘hello world’) ello world 匹配 0或多次 任意字符 e开头,d结尾
+ 重复匹配至少1次 <=> {1,+oo} re.findall(‘h.+w’,‘hello world’) hello w 匹配 h开头 ,1或多次,任意字符,w结尾
? 匹配 0或1个 <=> {0,1} re.findall(‘a?b’,‘aaaabkjoiheo’) [‘ab’] 匹配0或1个a以b结尾
{} {n} , 匹配n次 1、re.findall(‘a{1,5}b’,‘abbaaaaabbbbb’)
2、re.findall(‘a{5}b’,‘abbaaaaabbbbb’)
1、[‘ab’,‘aaaaab’]
2、 [‘aaaaab’]
[] 字符集
1. 取消元字符的特殊功能, 除了(’\’,’^’,’-’)
2.
re.findall(’[w*]’,‘asdx*’) [‘w’,’*’]
\ 1.反斜杠后边跟元字符去除其特殊功能
2.反斜杠后边跟普通字符(部分)实现特殊功能
1.\d 匹配任何【十进制数】 —> [0-9];
2.\D 匹配任何【非数字字符】 —> [^0-9]
3.\s 匹配任何【空白字符】 —> [ \t\n\r\f\v];【4.\w 匹配任何【字母、数字字符】 —> [0-9a-zA-Z];
5.\W 匹配任何【非字母、数字字符】 —> [^0-9a-zA-Z];
6.\b 匹配一个特殊字符边界,即单词和空格间的位置(空、空格、$…)
() 分组 re.search(’(as)+’,‘sdjkfasasf’) [‘asas’] 以 as 作为一个整体,重复匹配
| 管道符 —> re.search(’(as)|3’,‘3sdjkfasasf’) [‘3’]

拓展 :

  • *? —># 惰性匹配
  • ?: —># 取消优先级
  • r —># 原生字符串,原生字符串,忽略特殊字符。即r"\ - + . *" 等, \* 不再是特殊含义
  • [] # 字符集
    • re.findall('a[cd]x','acx') # >>> ['acx']  , [c,d]任取一个--->或 即 'c' ',' 'd'
      re.findall('a[cd,e]x','adx') # >>> ['adx']
      re.findall('a[cd]x','acdx') # >>> []
      # [a-z]    # >>> 匹配 a-z 范围内的任意一个字符
      # [a-z0-9A-Z]
      # [0-9a-zA-z]
      # [0-9]{11}
      
  • [^] # —> 取反
    1. re.findall('[^a]','asdx*')  # >>> ['sdx']
      
    2. re.findall('[^as]','asdx') # >>> ['dx']    ===> [^(a,s)]
      
  • ()一个组 , ?P给这个组起名字 , 组名为groupName , \d{3} 匹配规则 匹配3个数字
    1. dd = re.search('(?P<id1>\d{3})/(?P<id2>\w{3})','weew34ttt123/ooo') # >>>123/ooo    \w{3} 匹配三个字母
      dd.group('id2') # >>> ooo
      

推荐使用

  • *+?

re模块中的方法

  • re.findall() #全匹配,返回匹配的所有结果,作为一个列表
    1.  re.findall('w\w{2}l','hello world')  # >>>worl
      
    2. # 转义
      re.findall('\\\\','abc\de') # >>> ['\\'] 
      # 等价 
      re.findall(r'\\','abc\de')
      
      re 的 \ 也有特殊意义
  • re.search() # 返回匹配到的第一个对象(objetc),对象可以调用group()方法返回结果(匹配出第一个满足条件的结果)
    1. mm=re.search('sb','dkkdjfkjsbkljlisb') # >>> ...object: span=(8,10),match='sb'    ,span ===> 范围,只找一个
      mm.group() # >>>sb   
      #等价
      mm=re.search('sb','dkkdjfkjsbkljlisb').group
      
    2. ss = re.search('(?P<groupName>\d{3})','weew34ttt123/000') # >>>123
      
  • re.match() # 只在字符串开始匹配,成功则返回一个对象(object)
  • re.split() # 字符串分割
    1. re.split('[af]','kkkaiiifooo') # 逐个分
           #          >>> 1 kkk iiifooo
      	 # 最终结果:>>>  2 kkk iii ooo
      
  • re.sub(,,n) # n 替换n次
    1. re.sub('l.....e','s.....b','kjoejlangkyefo') 	# >>> kjoejs.....bfo
      
  • re.compile() # 编译正则对象
    1. sub = re.compile('\.com')		# 将正则规则 编译为正则 对象
      sub.findall('www.baidu.com') >>> .com