python re模块学习笔记

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
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值