程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Python正则表达式详解

发布于2020-03-11 19:54     阅读(2308)     评论(0)     点赞(10)     收藏(2)


1、正则表达式介绍

  正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。正则表达式并非Python独有,许多编程语言如Java均有对其的实现。Python中主要由re模块实现正则表达式的使用。

2、工具介绍

  正则表达式说到底就是一款工具,一款用于匹配字符串的工具。正则表达式内容繁琐,不建议死记硬背,每次用熟几个,久而久之就记得住了。这里介绍一个网站和一张表,便能很好地掌握正则表达式了。
  正则表达式的在线测试工具:https://tool.oschina.net/regex
  正则表达式匹配规则表:
在这里插入图片描述

3、re模块

  re模块主要提供了match()、search()、findall()等方法实现正则表达式

3.1、match()

常规使用:

str = "I love China!520!"       #定义待匹配字符串
regExp = "^\w\s\w{4}\s\w{5}\S\d{3}.*"             #定义匹配规则
result = re.match(regExp,str)
print(result)
print(result.group())       #输出匹配到的内容
print(result.span())        #输出匹配到的范围

输出结果为:

<re.Match object; span=(0, 17), match=‘I love China!520!’>
I love China!520!
(0, 17)

使用group()获得特定内容:在正则表达式中,对想要获得内容的地方添加括号

str = "I love China!520!"       #定义待匹配字符串
regExp="^\w\s(\w{4})\s(\w{5})\S\d{3}.*" #定义匹配规则,对两个地方添加了括号!
result = re.match(regExp,str)
print(result)
print(result.group(1))       #输出匹配到的内容1
print(result.group(2))       #输出匹配到的内容2

输出结果为:

<re.Match object; span=(0, 17), match=‘I love China!520!’>
love
China

还可以指定修饰符

  1. re.I:忽略大小写
  2. re.L:做本地化识别匹配
  3. re.M:多行匹配
  4. re.S:使 . 匹配包括换行在内的所有字符
  5. re.U:根据Unicode解析字符

讲love改为LOVE,尝试re.I的作用:

str = "I love China!520!"       #定义待匹配字符串
regExp = "^\w\sLOVE\s\w{5}\S\d{3}.*"             #定义匹配规则
result = re.match(regExp,str,re.I)
print(result)
print(result.group())       #输出匹配到的内容
print(result.span())        #输出匹配到的范围

3.2、search()

  match()有一个缺陷就是它是从字符串的开头开始匹配的,一旦开头就不匹配,就失败了。但我们实际应用是获取字符串中符合规则的子串,所以就要用到search()了,search()可以扫描整个字符串并返回第一个匹配的字串

3.3、findall()

  findall()与search()类似,不过它是返回所有的结果。

import re
import requests

if __name__ == '__main__':
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36"
    }
    html = requests.get("https://bbs.hupu.com/all-gambia",headers=headers)	#虎扑老jr了
    # print(html.text)
    results = re.findall('<li>.*?<span class="textSpan">.*?href="(.*?)".*?title="(.*?)".*?<span class="forum">.*?>(.*?)<.*?</li>',html.text,re.S)
    for result in results:
        print("链接:","https://bbs.hupu.com"+result[0],end=' ')
        print("标题:",result[1],end=' ')
        print("来源:",result[2])

输出结果为:在这里插入图片描述

3.4、sub()

  sub()可以将正则表达式指定的内容修改:

str = "你欠我100块钱"
str_1 = re.sub('\d+','1000',str)
print(str_1)

结果输出为:

你欠我1000块钱

3.5、compile()

  compile()可以将字符串编译成正则表达式对象,通过查看源码知道,我们调用每一个方法时,该方法内部都会调用一个私有方法_compile(),就是将该字符串形式的正则表达式转换成真正的正则表达式对象。

有错误的地方敬请指出!觉得写得可以的话麻烦给个赞!欢迎大家评论区或者私信交流!



所属网站分类: 技术文章 > 博客

作者:32738ew

链接:https://www.pythonheidong.com/blog/article/252502/f57c191a3bb778afba93/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

10 0
收藏该文
已收藏

评论内容:(最多支持255个字符)