正则表达式

1、re.match

  语法: re.match(pattern, string, flags=0)

  功能: 在字符串的起始位置匹配一个模式, 符合条件的模式不在起始位置也返回None

测试字符串:

restr = '''<div class="viewad-topMeta"><div class="viewad-meta"><div class="viewad-meta-item"><label>货车车型:</label><div class="content"><a class="tag-color" href="/ershougongchengche/m37397/" target="_blank"><span>平板车</span></a></div></div><div class="viewad-meta-item"><label>车型小类:</label><div class="content"><span>平板式</span></div></div><div class="viewad-meta-item"><label>品牌:</label><div class="content"><span>福田</span></div></div></div><section class="viewad-contact"><ul><li class="chat-btn-box"><label>联系:</label><a class="show-contact" id="show-contact" href="javascript:void(0)" data-phone="15333278866" data-vn="0" data-hide-modal="0" target="_self"><div class="icon-warp"><i class="icon-contact"></i></div><div class="contact-text"><div class="text-tit">点击查看完整号码</div><div class="contact-number">1533327****</div></div></a></li><li class="chat-btn-box"><label>其他联系:</label><a class="private-message message-btn disabled" id="pivate-contact" href="javaScript:;"><i class="icon icon-message"></i>私信联系</a><a class="weixin-message message-btn" id="weixin-contact"><i class="icon icon-weixin"></i>微信联系</a><div class="weixin-contact-promo"><div class="close" id="weixin-contact-close">x</div><div class="detail">微信号: 15333278866</div></div><div class="leads-reserve" id="message-back"><img src="//file.baixing.net/201709/20aad4970d568b9584eb12ba6ae486ed.jpg"><a href="//truck.baixing.com/leads/buyer/form?src=web_viewAd">预约回访</a></div></li></ul></section></div>
'''

# 字符串开头字符为<div, 如果pattenr位置是div则返回None
re.match('<div', restr).group() 结果: <div # .* 除换行符\r , \n之外, 能代表所有字符(匹配的字符为:开始位置--->货车车型) re.match(r'(.*)货车车型',restr).group() 结果: <div class="viewad-topMeta"><div class="viewad-meta"><div class="viewad-meta-item"><label>货车车型

 

2、re.search

  语法 :re.search(pattern, string, flags=0)

  功能: 返回第一个成功的匹配

#group  返回匹配的整个字符串, groups返回 括号中的匹配

re.search("div", restr).group() # 返回值为第一个div字符串 re.search("div", restr).groups() # 返回值为()
re.search(r'(.*)class(.*?)class="viewad-meta"', restr).group()
# 返回值为<div class="viewad-topMeta"><div class="viewad-meta"字符串
re.search(r'(.*)class(.*?)class="viewad-meta"', restr).groups() 
# 返回值为(
'<div ', '="viewad-topMeta"><div ')

 

3、re.sub

  语法: re.sub(pattern, repl, string, count=0, flags=0)

  功能: 将字符串string中的pattern替换为repl, 替换次数为count. flags为编译时的匹配模式

# 将restr字符串中的viewad替换为vvv, 替换2次
r = re.sub("viewad","vvv",restr, count=2)

# 将restr中的连串数字替换为#####, 替换所有
r = re.sub(r"\d+","#####", restr)

  repl也可以为一个函数

# 数值 乘 2
def double(matched):
    return str(int(matched.group("value")) *2)

# 给匹配的数字定义一个组名
r = re.sub("(?P<value>\d+)", double, restr)
print(r)

 

4、re.compile

  语法 :re.compile(pattern[, flags])

  功能 : 编译并生成一个表达式对象,供match和search两个函数使用

  flags:  

    re.I   (IGNORECASE)忽略大小写

    re.L  (LOCALE)表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境

    re.M (MULTILINE)多行模式

    re.S    . 和换行符集合(任意字符+换行符)

    re.U   表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库

    re.X   为了增加可读性,忽略空格和' # '后面的注释

# 匹配第一个连续字符串+空格+连续字符串
pattern = re.compile(r"([a-z]+) ([a-z]+)", re.S) m = pattern.search(restr) print(m.groups()) 结果:('div', 'class')

 

5、

 

posted on 2019-09-27 17:22  孔扎根  阅读(182)  评论(0编辑  收藏  举报

导航