正则表达式(1)

在这里插入图片描述

专栏导读

✍ 作者简介:i阿极,CSDN 数据分析领域优质创作者,专注于分享python数据分析领域知识。

本文录入于《python网络爬虫实战教学》,本专栏针对大学生、初级数据分析工程师精心打造,对python基础知识点逐一击破,不断学习,提升自我。
订阅后,可以阅读《python网络爬虫实战教学》中全部文章内容,包含python基础语法、数据结构和文件操作,科学计算,实现文件内容操作,实现数据可视化等等。
✍ 其他专栏:《数据分析案例》《机器学习案例》

😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍

1、match

这里首先介绍第一个常用的匹配方法一一—match,向它传人要匹配的字符串以及正则表达式,就可以检测这个正则表达式是否和字符串相匹配。
match方法会尝试从字符串的起始位置开始匹配正则表达式,如果匹配,就返回匹配成功的结果;如果不匹配,就返回None。
实例如下:

import re
content = 'Hello 123 4567 World_This is a Regex Demo'
print(len(content))
result = re.match("^Hello\s\d\d\d\s\d{4}\s\w{10}", content)
print(result)
print(result.group())
print(result.span())

运行结果如下:

41
<re.Match object; span=(0, 25), match='Hello 123 4567 World_This'>
Hello 123 4567 World_This
(0, 25)

这个实例首先声明了一个字符串,其中包含英文字母、空白字符、数字等。接着写了一个正则表达式:
^Hello\s\d\d\d\s\d{4}\s\w{10}
用它来匹配声明的那个长字符串。开头的^表示匹配字符串的开头,也就是以Hello开头;然后\s表示匹配空白字符,用来匹配目标字符串里Hello后面的空格;\d表示匹配数字,3个\d用来匹配123;紧接着的1个\s表示匹配空格;目标字符串的后面还有4567,我们其实依然可以用4个\d来匹配,但是这么写比较烦琐,所以可以用\d后面跟{4}的形式代表匹配4次数字;后面又是1个空白字符,最后\w{10}则表示匹配10个字母及下划线。我们注意到,这里其实并没有把目标字符串匹配完,不过这样依然可以进行匹配,只是匹配结果短一点而已。

在match方法中,第一个参数是传人了正则表达式,第二个参数是传人了要匹配的字符串。将输出结果打印出来,可以看到结果是SRE_Match对象,证明匹配成功。
该对象包含两个方法:

group方法可以输出匹配到的内容,结果是Hello 123 4567 World_This,这恰好是正则表达式按照规
则匹配的内容;
span方法可以输出匹配的范围,结果是(0,25),这是匹配到的结果字符串在原字符串中的位置范围。

通过上面的例子,我们基本了解了如何在Python中使用正则表达式来匹配一段文字。

2、匹配目标

用match方法可以实现匹配,如果想从字符串中提取一部分内容,该怎么办呢?就像上一节的实例一样,从一段文本中提取出E-mail地址或电话号码。

可以使用括号()将想提取的子字符串括起来。()实际上标记了一个子表达式的开始和结束位置,被标记的每个子表达式依次对应每个分组,调用group方法传入分组的索引即可获取提取结果。

实例如下:

import re
content = 'Hello 1234567 World_This is a Regex Demo'
result= re.match('^Hello\s(\d+)\sWorld',content)
print(result)
print(result.group())
print(result.group(1))
print(result.span())

运行结果如下:

<re.Match object; span=(0, 19), match='Hello 1234567 World'>
Hello 1234567 World
1234567
(0, 19)

可以看到,我们成功得到了1234567。这里用的是group(1),它与group()有所不同,后者会输出完整的匹配结果,前者会输出第一个被()包围的匹配结果。假如正则表达式后面还有用()包围的内容,那么可以依次用group(2)、group(3)等获取。

3、通用匹配

刚才我们写的正则表达式其实比较复杂,只要出现空白字符就需要写Is匹配,出现数字就需要写\d匹配,这样的工作量非常大。其实完全没必要这么做,因为还有一个万能匹配可以用,就是.*。
其中,可以匹配任意字符(除换行符),*代表匹配前面的字符无限次,所以它们组合在一起就可以匹配任意字符了。有了它,我们就不用个字符进行匹配了。

接着上面的例子,我们利用.*改写一下正则表达式:

import re
content = 'Hello 123 4567 World_This is a Regex Demo'
result = re.match("^Hello.*Demo$", content)  
print(result)
print(result.group())
print(result.span())

这里我们直接省略中间部分,全部用,*来代替,并在最后加一个结尾字符串。

运行结果如下:

<re.Match object; span=(0, 41), match='Hello 123 4567 World_This is a Regex Demo'>
Hello 123 4567 World_This is a Regex Demo
(0, 41)

可以看到,group方法输出了匹配的全部字符串,也就是说我们写的正则表达式匹配到了目标字符串的全部内容;span方法输出(0,41),这是整个字符串的长度。

因此,使用.*能够简化正则表达式的书写。

4、常用匹配规则表格

在这里插入图片描述

📢文章下方有交流学习区!一起学习进步!💪💪💪
📢首发CSDN博客,创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗

相关推荐

  1. 22.1 表达式-定义表达式语法

    2024-04-06 21:08:02       24 阅读
  2. 表达式速攻1/2

    2024-04-06 21:08:02       61 阅读
  3. 常用的表达式1

    2024-04-06 21:08:02       55 阅读
  4. Python 表达式1 函数基础

    2024-04-06 21:08:02       31 阅读
  5. 表达式 0.1v

    2024-04-06 21:08:02       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-06 21:08:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-06 21:08:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-06 21:08:02       82 阅读
  4. Python语言-面向对象

    2024-04-06 21:08:02       91 阅读

热门阅读

  1. 在MacOS上安装Homebrew:初学者指南

    2024-04-06 21:08:02       50 阅读
  2. js的some函数

    2024-04-06 21:08:02       44 阅读
  3. 【面经】3月29日 美团/美团平台/后端/一面/1h

    2024-04-06 21:08:02       37 阅读
  4. tomcat 知多少

    2024-04-06 21:08:02       35 阅读
  5. 新概念英语1:Lesson 19 学习笔记

    2024-04-06 21:08:02       42 阅读
  6. git使用

    git使用

    2024-04-06 21:08:02      30 阅读
  7. Swagger介绍与knife4j框架

    2024-04-06 21:08:02       33 阅读
  8. c++算法学习笔记 (19) 堆

    2024-04-06 21:08:02       38 阅读