本文主要介绍一些Python的正则表达式,像图形数据库、正则表达式等作为知识图谱构建的基础,还是有必要知道一下的,这几篇博客都属于为以后打基础。关注专栏《知识图谱系列》了解更多关于知识图谱的内容~


目录

一、简介

二、re.match函数

2.1 函数介绍

2.2 示例

三、re.search函数

3.1 函数介绍

3.2 示例

四、检索和替换

4.1 函数介绍

4.2 repl参数是非函数的示例

4.3 repl参数是函数的示例

五、re.compile函数

5.1 函数介绍

5.2 示例

六、findall函数

6.1 函数介绍

6.2 示例

七、re.finditer函数

7.1 函数介绍

7.2 示例

八、re.split函数

8.1 函数介绍

九、其他

9.1 正则表达式修饰符-可选标志

9.2 正则表达式模式


一、简介

Python自1.5版本起增加了re模块,它提供 Perl风格的正则表达式模式。正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。re模块使Python语言拥有全部的正则表达式功能。compile函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。re模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。接下来,我们来具体看一下这些函数。

二、re.match函数

2.1 函数介绍

re.match函数尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none;如果匹配成功,就返回一个匹配的对象。其语法格式如下:

re.match(pattern, string, flags=0)

相关参数说明如下:

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

2.2 示例

import reif __name__ == '__main__':test_data = "This is a test data: My name is xzw."match_object = re.match(r'(.*) is (.*?) .*', test_data, re.M | re.I)if match_object:print("match_object.groups() : ", match_object.groups())print("match_object.group() : ", match_object.group())print("match_object.group(1) : ", match_object.group(1))print("match_object.group(2) : ", match_object.group(2))else:print("No match!!")

输出这个结果,我们可以看到如下内容:

三、re.search函数

3.1 函数介绍

re.search函数会在字符串内查找模式匹配,直到找到第一个匹配。其语法为:

re.search(pattern, string, flags=0)

函数参数说明如下:

同样的,匹配成功re.search方法返回一个匹配的对象,否则返回None。

3.2 示例

import reif __name__ == '__main__':test_data = "This is a test data: My name is xzw."match_object = re.search( r'(.*) name (.*?) .*', test_data, re.M|re.I)if match_object:print("match_object.groups() : ", match_object.groups())print("match_object.group() : ", match_object.group())print("match_object.group(1) : ", match_object.group(1))print("match_object.group(2) : ", match_object.group(2))else:print("No match!!")

函数运行结果如下:

注意:re.match函数只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search函数匹配整个字符串,直到找到一个匹配。

下面来看一个例子,用来区分两者的区别。

import reif __name__ == '__main__':test_data = "This is a test data: My name is xzw."search_object = re.search(r'name', test_data, re.M | re.I)if search_object:print("search_object.group() : ", search_object.group())else:print("No search!!")match_object = re.match(r'name', test_data, re.M | re.I)if match_object:print("match_object.group() : ", match_object.group())else:print("No match!!")

输出结果如下:

四、检索和替换

4.1 函数介绍

re.sub函数用于替换字符串中的匹配项。其语法如下:

re.sub(pattern, repl, string, max=0)

其中,repl参数可以是一个函数。

4.2 repl参数是非函数的示例

import reif __name__ == '__main__':phone = "187-1111-1111  # 这是一个移动的电话号码"# 删除字符串中的注释内容number = re.sub(r'#.*$', "", phone)print("phone: ", number)# 删除非数字(-)的字符串number = re.sub(r'\D', "", phone)print("phone: ", number)

运行结果为:

4.3 repl参数是函数的示例

import redef multiply(match_num):'''将匹配到的数字乘以2:param match_num: 匹配到的数字:return: 返回处理后的结果'''value = int(match_num.group('value'))return str(value * 2)if __name__ == '__main__':s = '12354HFD567'print(re.sub('(?P<value>\d+)', multiply, s))

运行结果如下所示:

五、re.compile函数

5.1 函数介绍

compile函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。其语法为:

re.compile(pattern[, flags])

参数解释如下:

(1)pattern: 一个字符串形式的正则表达式
(2)flags: 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:re.I 忽略大小写re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境re.M 多行模式re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于Unicode字符属性数据库re.X 为了增加可读性,忽略空格和 # 后面的注释

5.2 示例

import reif __name__ == '__main__':pattern = re.compile(r'\d+')  # 用于匹配至少一个数字m1 = pattern.match('aaa123bbb456ccc789')  # 查找头部,没有匹配print(m1)m2 = pattern.match('aaa123bbb456ccc789', 2, 10)  # 从'a'的位置开始匹配,没有匹配print(m2)m3 = pattern.match('aaa123bbb456ccc789', 3, 10)  # 从'1'的位置开始匹配,正好匹配print(m3)print(m3.group(), m3.start(), m3.end(), m3.span())

运行结果如下所示:

在上面的示例中,当匹配成功时返回一个Match对象,其中:group([group1, …]) 方法用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用 group() 或 group(0);start([group]) 方法用于获取分组匹配的子串在整个字符串中的起始位置(子串第一个字符的索引),参数默认值为 0;end([group]) 方法用于获取分组匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引+1),参数默认值为 0;span([group])方法返回 (start(group), end(group))。

六、findall函数

6.1 函数介绍

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。其语法为:

findall(string[, pos[, endpos]])

参数说明如下:

1、string: 待匹配的字符串。
2、pos: 可选参数,指定字符串的起始位置,默认为0。
3、endpos: 可选参数,指定字符串的结束位置,默认为字符串的长度。

6.2 示例

import reif __name__ == '__main__':pattern = re.compile(r'\d+')  # 查找数字result1 = pattern.findall('This is a test data: My name is xzw.')result2 = pattern.findall('dhfsa3bn45tdfs', 0, 10)print(result1)print(result2)

运行结果如下:

七、re.finditer函数

7.1 函数介绍

和findall函数类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。其语法为:

re.finditer(pattern, string, flags=0)

7.2 示例

import reif __name__ == '__main__':iter = re.finditer(r"\d+", "vfdkl4teree87693n2342ln")for match in iter:print(match.group())

运行结果如下:

八、re.split函数

8.1 函数介绍

split 方法按照能够匹配的子串将字符串分割后返回列表,其语法如下:

re.split(pattern, string[, maxsplit=0, flags=0])

其参数说明如下:

九、其他

9.1 正则表达式修饰符-可选标志

正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。

9.2 正则表达式模式

模式字符串使用特殊的语法来表示一个正则表达式:字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。多数字母和数字前加一个反斜杠时会拥有不同的含义。标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。反斜杠本身需要使用反斜杠转义。由于正则表达式通常都包含反斜杠,所以最好使用原始字符串来表示它们。模式元素(如 r'/t',等价于'//t')匹配相应的特殊字符。下表图列出了正则表达式模式语法中的特殊元素。如果你使用模式的同时提供了可选的标志参数,某些模式元素的含义会改变。

本文到此已经接近尾声了,本文主要讲述了Python的正则表达式。其中参考了W3CSchool的教程。你们在此过程中遇到了什么问题,欢迎留言,让我看看你们都遇到了什么问题~

五、Python中的正则表达式相关推荐

  1. 站长在线零基础Python完全自学教程20:在Python中使用正则表达式完全解读

    欢迎你来到站长学堂,学习站长在线出品的在线课程<零基础 Python完全自学教程>今天给大家分享的是第20课< 在Python中使用正则表达式完全解读>.本节课是一个大课,我分 ...

  2. 站长在线Python精讲:在Python中使用正则表达式的sub()方法替换字符串详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中使用正则表达式的sub()方法替换字符串详解>. 在Python中使用正则表达式的sub()方法替换字符串. ...

  3. Python中re(正则表达式)模块函数学习

    2019独角兽企业重金招聘Python工程师标准>>> Python正则表达式指南 今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的 ...

  4. [Python]网络爬虫(七):Python中的正则表达式教程(转)

    接下来准备用糗百做一个爬虫的小例子. 但是在这之前,先详细的整理一下Python中的正则表达式的相关内容. 正则表达式在Python爬虫中的作用就像是老师点名时用的花名册一样,是必不可少的神兵利器. ...

  5. [Python]网络爬虫(七):Python中的正则表达式教程

    接下来准备用糗百做一个爬虫的小例子. 但是在这之前,先详细的整理一下Python中的正则表达式的相关内容. 正则表达式在Python爬虫中的作用就像是老师点名时用的花名册一样,是必不可少的神兵利器. ...

  6. python中的正则表达式是干嘛的_python中正则表达式总结

    re.match():从字符串的开始进行匹配 re.search():扫描整个字符串返回第一个匹配 re.findAll():返回所有匹配的字符串 Pattern 对象不能实例化,只能通过compil ...

  7. Python中利用正则表达式做数据清洗(re)

    目录 1.常用正则表达式 Python中常用正则表达式 2.正则表达式做数据清洗 2.1 从网页HTML标签中提取文本 2.2 去掉英文文章中标点符号,提取词汇 2.3 提取以.com结尾的邮箱 1. ...

  8. Python中的正则表达式(翻译自DiveintoPython3)

    Python中的正则表达式(来自Dive into Python3) 利用python提供的最简单的字符串函数index(), find(), split(), count(), replace()等 ...

  9. 站长在线Python精讲:在Python中使用正则表达式的split()方法分割字符串详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中使用正则表达式的split()方法分割字符串详解>. 使用正则表达式分割字符串 在Python中使用正则表达 ...

最新文章

  1. 项目pom.xml第一行报错解决方案
  2. Java Web之文件的上传及下载
  3. TypeError: 'function' object is not subscriptable
  4. 三十三、Java集合中的LinkedList
  5. 数组操作的两个常见小问题
  6. Nginx- 实现跨域访问
  7. 使用Apache Camel进行负载平衡
  8. Dom4J__ZZ_我的示例代码
  9. Java、Android、oc冒泡排序算法随笔
  10. 【华为云技术分享】从零搭建一个灰度发布环境
  11. 基于JAVA+SpringMVC+Mybatis+MYSQL的网络投票系统
  12. iOS 使用SourceTree注意事项
  13. 为原生对象添加方法的潜在危险
  14. windows 删除服务_哪些Windows 10 系统服务可以安全禁用?
  15. 【后厂村】打工人的愿望
  16. c# https请求忽略证书验证_C# httpwebrequest访问HTTPS错误处理方法
  17. 基于python3.7的4环电阻读数工具
  18. 小米笔记本桌面添加计算机,小米笔记本外接两个显示屏的设置与操作方法
  19. 用C语言验证“6174数学黑洞之谜
  20. submit表单提交

热门文章

  1. 用下饭小菜炒一道鲜美下酒菜——榄豉酱炒虾
  2. 解决java.lang.IllegalArgumentException: Invalid column index (256). Allowable column range for BIFF8
  3. MATLAB网红时钟
  4. NO.17——应用Scrapy框架实现美女图片的打包下载
  5. 关于12306网站图形验证码的猜想
  6. 解决 Windows protected your PC
  7. 特征值与特征向量、特征方程、特征多项式、矩阵相似、相似变换、矩阵对角化、奇异值分解(Singular Value Decomposition)手算加MATLAB
  8. 车辆检测站管理系统如何选择?
  9. 2021-2027全球与中国热成型塑料容器市场现状及未来发展趋势
  10. 异步处理在分布式系统中的优化作用