码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式

时间:2018-12-11 01:31:38      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:一个   表达式   分组   下划线   style   code   结束   生成   说明   

为什么要用正则表达式:用来匹配一类具有相同规则的字符串

规则:

单字符:

  . :出换行以外的所有字符

  []:[aoe] [a-w] 匹配集合中任意一个字符

  \d:数字 [0-9]

  \D:非数字

  \w:数字、字母、下划线、中文

  \W:非\w

  \s:所有的空白字符

  \S:非空白字符

数量修饰(控制次数):

  * :任意多次  >=0

  +:至少一次 >=1

  ?:可有可无  0次或者1次

   {m}:固定m次

   {m,}:至少m次

  {m,n}:m~n次

边界:

  \b :

  \B :

  $:以XX结尾

   ^:以XX开头

分组:

  ():视为一个整体

  (ab){4}: 匹配4次ab   \2   \1

  ():子模式\组模式  

  <>:

子模式举例:

import re

"""题目:写一个正则,匹配下面的字符串"""
string = <p><div><span>猪八戒</span></div></p>
# 说明:匹配过程中,需要将div 和 span 分别作为一个整体,所以要用(),
# 而且后面的div以及span要与前面的一致,
# 所以用\2来匹配第二个()中的span,\1来匹配第一个()中的div
pattern = re.compile(r<(\w+)><(\w+)>\w+</\2></\1>)  # 生成正则

ret = pattern.search(string)   # 搜索要匹配的字符串
print(ret)

运行结果:

ret----- <re.Match object; span=(3, 30), match=<div><span>猪八戒</span></div>>

 

贪婪模式:  .*   和 .+

  .*? :取消贪婪模式

  .+?:取消贪婪模式

举例:

string_2 = <div>一二三四五</div></div></div>
pattern_2 = re.compile(r<div>.*</div>)   # .* 贪婪模式,匹配一二三四五</div></div>
pattern_3 = re.compile(r<div>.*?</div>)  # .*? 取消贪婪模式,只匹配到 一二三四五 就结束匹配
ret_2 = pattern_2.search(string_2)
ret_3 = pattern_3.search(string_2)
print("ret_2 ----", ret_2)   # 可以匹配全部的
print("ret_3 ----", ret_3)    # 匹配部分

运行结果:

ret_2 ---- <re.Match object; span=(0, 28), match=<div>一二三四五</div></div></div>>
ret_3 ---- <re.Match object; span=(0, 16), match=<div>一二三四五</div>>

 

正则表达式

标签:一个   表达式   分组   下划线   style   code   结束   生成   说明   

原文地址:https://www.cnblogs.com/kulankadamei/p/10100071.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!