大话 Python:python 基础巩固 -- 灵活运用正则表达式完成数据提取与筛选

在一般的后端语言中都有正则表达式的使用,个人觉得正则表达式的难点就是有比较多的元字符比较难记,所以建议大家收藏。而在 python 的编程中,特别是爬虫之后的数据筛选、清洗等操作都需要对字符串进行大量的操作,使用正则表达式无疑是最简便的一种字符串处理操作。

1、正则表达式的元字符及组装形式

首先,正则表达式就是由一个一个的元字符组合起来的一个字符串,然后以这个字符串作为格式去匹配任意的字符串最后生成新的数据文本。那么,先来看一下在 python 中像这样的元字符到底有哪些。
 1.                    匹配任意字符(不包括换行符) 2^                    匹配开始位置,多行模式下匹配每一行的开始 3$                    匹配结束位置,多行模式下匹配每一行的结束 4*                    匹配前一个元字符0到多次 5+                    匹配前一个元字符1到多次 6?                    匹配前一个元字符0到1次 7{m,n}                匹配前一个元字符m到n次 8\\                   转义字符,跟在其后的字符将失去作为特殊元字符的含义,例如\\.只能匹配.,不能再匹配任意字符 9[]                   字符集,一个字符的集合,可匹配其中任意一个字符10|                    逻辑表达式 或 ,比如 a|b 代表可匹配 a 或者 b11(...)                分组,默认为捕获,即被分组的内容可以被单独取出,默认每个分组有个索引,从 1 开始,按照"("的顺序决定索引值12(?iLmsux)            分组中可以设置模式,iLmsux之中的每个字符代表一个模式,用法参见 模式 I13(?:...)              分组的不捕获模式,计算索引时会跳过这个分组14(?P<name>...)        分组的命名模式,取此分组中的内容时可以使用索引也可以使用name15(?P=name)            分组的引用模式,可在同一个正则表达式用引用前面命名过的正则16(?#...)              注释,不影响正则表达式其它部分,用法参见 模式 I17(?=...)              顺序肯定环视,表示所在位置右侧能够匹配括号内正则18(?!...)              顺序否定环视,表示所在位置右侧不能匹配括号内正则19(?<=...)             逆序肯定环视,表示所在位置左侧能够匹配括号内正则20(?<!...)             逆序否定环视,表示所在位置左侧不能匹配括号内正则21(?(id/name)yes|no)   若前面指定id或name的分区匹配成功则执行yes处的正则,否则执行no处的正则22\number              匹配和前面索引为number的分组捕获到的内容一样的字符串23\A                   匹配字符串开始位置,忽略多行模式24\Z                   匹配字符串结束位置,忽略多行模式25\b                   匹配位于单词开始或结束位置的空字符串26\B                   匹配不位于单词开始或结束位置的空字符串27\d                   匹配一个数字, 相当于 [0-9]28\D                   匹配非数字,相当于 [^0-9]29\s                   匹配任意空白字符, 相当于 [ \t\n\r\f\v]30\S                   匹配非空白字符,相当于 [^ \t\n\r\f\v]31\w                   匹配数字、字母、下划线中任意一个字符, 相当于 [a-zA-Z0-9_]32\W                   匹配非数字、字母、下划线中的任意字符,相当于 [^a-zA-Z0-9_]

来源说明:以上元字符表说明引用自“博客园,菜鸟的日常”

2、python 的内置模块 re 操作正则表达式的模式

python 的 re 模块提供了很多内置的函数来操作正则表达式,掌握正则表达式以及这些函数的使用会更大的提高工作效率,因为大多时候都是在和字符串打交道。并且 re 模块在使用这些函数来操作正则表达式的时候都可以指定不同类型的模式。比如:re 内置模块的 compile(pattern, flags=0) 函数中的 flags 参数就是用于指定匹配模式的,默认情况下各个内置函数的模式都等于零就是不指定模式。
1re.I    使匹配对大小写不敏感2re.L    做本地化识别(locale-aware)匹配3re.M    多行匹配,影响 ^ 和 $4re.S    使 . 匹配包括换行在内的所有字符5re.U    根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.6re.X    该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
3、re 模块函数匹配正则表达式操作字符串

compile(pattern, flags=0) 对匹配的正则表达式进行预编译,这种模式有利于后续对同一种匹配规则的复用,当然也可以不进行预编译使用 re 模块的内置函数直接进行正则表达式的使用。

findall(pattern, string, flags=0) 找到所有的匹配以后的数据,并且使用列表的形式返回匹配后的数据。
 1# 导入 re 内置模块 2import re 3# 定义多行字符串 sc 4sc = '''str1 5str2 6str3''' 7 8# 使用 compile() 函数进行正则表达式对预编译 9# 其中正则表达式为<.+>参照元字符表,表达式中<.>表示匹配任意字符(不包括换行符)10# <+> 表示匹配前一个元字符1到多次,组合<.+>就表示匹配所有字符不包括换行符11pattern = re.compile(".+")12# 正则表达对象调用 findall() 函数返回列表13print pattern.findall(sc)14# 打印返回列表,结果应该是下面列表15['str1', 'str2', 'str3']
split(pattern, string, maxsplit=0, flags=0) 按照正则表达式匹配的数据为切割点,对原来的数据进行切分并返回一个数据列表。
1# 定义原始字符串2sc = '''strw 1 laow3    strd 2 laow4    strc 3 laow'''5# 按照数字切分6print re.split('\d+', sc)7# 打印结果8['strw ', ' laow\n    strd ', ' laow\n    strc ', ' laow']

sub(pattern, repl, string, count=0, flags=0) 匹配正则表达式的字符串并且替换成指定的字符串后返回。

1# 导入内置模块 re2import re3# 定义原始字符串4sc = "the sum of 6 and 9 is [6+9]."5# 将[6+9]替换为156print re.sub('\[6\+9\]', '15', sc)7# 打印结果8the sum of 7 and 9 is 15.
search(pattern, string, flags=0) 查找正则表达式内容。
 1# 导入内置模块 re 2import re 3# 定义原始数据 4sc = '''strw 1 laow 5    strd 2 laow 6    strc 3 laow''' 7# 找到第一个以 t 开头的字符串 8sc_res = re.search('t\w+', sc) 9# 必须使用返回对象的 group() 函数才能打印出值,因为 search() 函数返回的是对象10print sc_res.group()

escape(pattern) 字符串的转义函数,当需要处理的字符串中包含正则表达式中的元字符时必须对原正则表达式进行转义,否则会导致匹配不正确。

 1# 导入内置模块 re 2import re 3# 定义原始字符串 4sc = ".+\d222" 5# 将正则表达式<.+\d222>进行转义 6pattern_str = re.escape(".+\d222") 7# 打印转移后的正则表达式 8print pattern_str 9# 打印结果10\.\+\\d22211# 打印匹配后的字符串12print re.findall(pattern_str, sc)13# 打印结果14['.+\\d222']
4、总结

除了上述第三点中列举的常见内置函数的使用,还有关于 python 内置的正则表达式的用法还有分组、环视等使用方法。能够帮助我们处理字符串的大多数问题,正则表达式在 python 中的使用非常强大、也是后端语言中使用比较高的,建议大家收藏。

(0)

相关推荐

  • 第63天:正则表达式

    正则表达式是一个特殊的字符串序列.一种模式,用来判断字符串是否符合这种模式,如:判断邮件地址是否有 @ 符号,判断手机号是否正确等待. 基本语法 在正则表达式中,可以使用 \d 匹配数字,\w 匹配数 ...

  • 懵了!女友突然问我什么是正则表达式

    来源:Python 技术「ID: pythonall」 正则表达式相信大家应该都不陌生,本质上就是一种微小的.高度专业化的编程语言,使用它你可以为要匹配的可能字符串集指定规则.大多数编程语言正则语法基 ...

  • 可视化正则表达式教程

    本文已经原作者 Amit Chaudhary 授权翻译. 在NLP中,根据模式检查文本或从文本中提取与特定模式匹配的内容是常见的任务.正则表达式是实现这一点的强大帮手. NLP (Natural La ...

  • UC头条:Python正则表达式保姆式教学,带你精通大名鼎鼎的正则!

    正则作为处理字符串的一个实用工具,在Python中经常会用到,比如爬虫爬取数据时常用正则来检索字符串等等.正则表达式已经内嵌在Python中,通过导入re模块就可以使用,作为刚学Python的新手大多 ...

  • python数据分析基础视频08-python中的数据透视表df.pivot_table()

    本系列课程适用人群: python零基础数据分析的朋友: 在校学生: 职场中经常要处理各种数据表格,或大量数据(十万级以上)的朋友: 喜欢图表可视化的朋友: 系列视频目前可在B站观看,会定期更新,欢迎 ...

  • 30分钟教会你爬取网站高清小姐姐图片,Python零基础爬虫入门

    30分钟教会你爬取网站高清小姐姐图片,Python零基础爬虫入门

  • Python零基础入门教函数

    Python函数 函数是封装好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道 Python 提供了许多内建函数,比如 print().但 ...

  • 10本 Python 零基础入门学习书籍推荐

    Python 是一款解释型.面向对象.动态数据类型的高级程序设计语言.语法简捷清晰,具有丰富和强大的类库,因而在各种行业中得到广泛的应用.对于初学者来讲,Python 是一款既容易学又相当有用的编程语 ...

  • Python编程基础:序列类型概述

    https://m.toutiao.com/is/eYtBNf7/ 序列首先是一种数据存储方式,用来存储一系列的数据.序列存储数据的主要特点就是数据在内存空间中是连续存储的,例如字符串abc(字符串属 ...

  • 【利用python进行数据分析——基础篇】利用Python处理和分析Excel表中数据实战

    作为一个学习用Python进行数据分析的新手来说,通过本文来记录分享一些我在用Python中的pandas.numpy来分析Excel表中数据的数据清洗和整理的工作,目的是熟悉numpy以及panda ...

  • 大大雷Python零基础课程第七节:函数

    https://m.toutiao.com/is/eHxD4oe/ 函数是组织好可以重复使用的一个代码块,能够在编程中有效地提高代码复用率.函数可以有参数,也可以没有参数, 函数的参数可以是任意数据类 ...

  • 关于Python的基础语法

    Python简单易学,但又博大精深.许多人号称精通Python,却不会写Pythonic的代码,对很多常用包的使用也并不熟悉.学海无涯,我们先来了解一些Python中最基本的内容. 变量 Python ...

  • Python的基础语法——标识符和保留字

    Python语言与Perl,C和Java等语言有许多相似之处.但是,也存在一些差异. 1.标识符 在编程语言中,我们需要用标识符来代指某个东西,这个东西可以是一个数据,可以是一个函数,一个类,那么与之 ...