使用Python正则表达式操作文本数据的方法


Posted in Python onMay 14, 2019

什么是正则表达式

正则表达式,是简单地字符的序列,可指定特定的搜索模式。正则表达式已存在很长一段时间,并且它本身就是计算机科学的一个领域。

在 Python中,使用Python的内置re模块处理正则表达式操作 。在本节中,我将介绍创建正则表达式并使用它们的基础知识。您可以使用以下步骤实现正则表达式:

  1. 指定模式字符串。
  2. 将模式字符串编译为正则表达式对象。
  3. 使用正则表达式对象在字符串中搜索模式。
  4. 可选:从字符串中提取匹配的模式。

编写和使用正则表达式

在Python中创建正则表达式的第一步是导入re 模块:

import re

Python正则表达式使用模式字符串表示,模式字符串是指定所需搜索模式的字符串。在最简单的形式中,模式字符串只能由字母,数字和空格组成。以下模式字符串表示精确字符序列的搜索查询。您可以将每个角色视为一个单独的模式。在后面的例子中,我将讨论更复杂的模式:

import re

pattern_string = "this is the pattern"

下一步是将模式字符串处理为Python可以使用的对象,以便搜索模式。这是使用re模块的compile()方法完成的。的编译()方法将图案字符串作为参数并返回一个正则表达式对象:

import re

pattern_string = "this is the pattern" regex = re.compile(pattern_string)

获得正则表达式对象后,可以使用它在搜索字符串中搜索模式字符串中指定的模式。搜索字符串只是您要在其中查找模式的字符串的名称。要搜索模式,可以使用regex对象的search()方法,如下所示:

import re

pattern_string = "this is the pattern" regex = re.compile(pattern_string)

match = regex.search("this is the pattern")

如果模式字符串中指定的模式位于搜索字符串中,则search()方法将返回匹配对象。否则,它返回None数据类型,这是一个空值。

由于Python相当松散地解释了True和False值,因此搜索函数的结果可以像if语句中的布尔值一样使用,这可能相当方便:

....

match = regex.search("this is the pattern") if match:

print("this was a match!")

这个模式应该产生一个匹配,因为它与模式字符串中指定的模式完全匹配。如果在搜索字符串的任意位置找到模式,搜索函数将生成匹配,如下所示:

....

match = regex.search("this is the pattern") if match:

print("this was a match!")

if regex.search("*** this is the pattern ***"): print("this was not a match!")

if not regex.search("this is not the pattern"): print("this was not a match!")

特殊字符

正则表达式取决于使用某些特殊字符来表达模式。因此,除非用于预期目的,否则不应直接使用以下字符:

. ^ $ * + ? {} () [] |

如果确实需要使用模式字符串中的任何前面提到的字符来搜索该字符,则可以编写以反斜杠字符开头的字符。这称为转义字符。这是一个例子:

pattern string = "c*b"

## matches "c*b"

如果需要搜索反斜杠字符本身,则使用两个反斜杠字符,如下所示:

pattern string = "cb"

## matches "cb"

匹配空格

在模式字符串中的任何位置使用s都匹配空白字符。这比空格字符更通用,因为它适用于制表符和换行符:

....

a_space_b = re.compile("asb") if a_space_b.search("a b"):

print("'a b' is a match!")

if a_space_b.search("1234 a b 1234"): print("'1234 a b 1234' is a match")

if a_space_b.search("ab"):

print("'1234 a b 1234' is a match")

匹配字符串的开头

如果在模式字符串的开头使用^字符,则只有在搜索字符串的开头找到模式时,正则表达式才会产生匹配:

....

a_at_start = re.compile("^a") if a_at_start.search("a"):

print("'a' is a match")

if a_at_start.search("a 1234"): print("'a 1234' is a match")

if a_at_start.search("1234 a"): print("'1234 a' is a match")

匹配字符串的结尾

类似地,如果在模式字符串的末尾使用$符号,则正则表达式将仅在模式出现在搜索字符串的末尾时生成匹配:

....

a_at_end = re.compile("a$") if a_at_end.search("a"):

print("'a' is a match") if a_at_end.search("a 1234"):

print("'a 1234' is a match") if a_at_end.search("1234 a"):

print("'1234 a' is a match")

匹配一系列字符

可以匹配一系列字符而不是一个字符。这可以为模式增加一些灵活性:

[A-Z] matches all capital letters

[a-z] matches all lowercase letters

[0-9] matches all digits

....

lower_case_letter = re.compile("[a-z]") if lower_case_letter.search("a"):

print("'a' is a match")

if lower_case_letter.search("B"): print("'B' is a match")

if lower_case_letter.search("123 A B 2"): print("'123 A B 2' is a match")

digit = re.compile("[0-9]") if digit.search("1"):

print("'a' is a match") if digit.search("342"):

print("'a' is a match") if digit.search("asdf abcd"):

print("'a' is a match")

匹配几种模式中的任何一种

如果存在构成匹配的固定数量的模式,则可以使用以下语法组合它们:

(||)

以下a_or_b正则表达式将匹配任何字符或ab字符的字符串:

....

a_or_b = re.compile("(a|b)") if a_or_b.search("a"):

print("'a' is a match") if a_or_b.search("b"):

print("'b' is a match") if a_or_b.search("c"):

print("'c' is a match")

匹配序列而不是仅匹配一个字符

如果+字符位于另一个字符或模式之后,则正则表达式将匹配该模式的任意长序列。这非常有用,因为它可以很容易地表达可以是任意长度的单词或数字。

将模式放在一起

通过一个接一个地组合图案串可以产生更复杂的图案。在下面的示例中,我创建了一个正则表达式,用于搜索严格后跟单词的数字。生成正则表达式的模式字符串由以下内容组成:

与数字序列匹配的模式字符串:[0-9]+与空白字符匹配的模式字符串:s与字母序列匹配的模式字符串:[az] +

与字符串结尾或空格字符匹配的模式字符串:(s | $)

....

number_then_word = re.compile("[0-9]+s[a-z]+(s|$)")

正则表达式split()函数

Python中的Regex 对象也有一个split()方法。split方法将搜索字符串拆分为子字符串数组。所述分裂发生在沿着其中该图案被识别的字符串中的每个位置。结果是在模式的实例之间出现的字符串数组。如果模式出现在搜索字符串的开头或结尾,则分别在结果数组的开头或结尾包含一个空字符串:

....

print(a_or_b.split("123a456b789")) print(a_or_b.split("a1b"))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python中编写数据库模块的教程
Apr 29 Python
在Python中操作字典之update()方法的使用
May 22 Python
Python每天必学之bytes字节
Jan 28 Python
通过Python爬虫代理IP快速增加博客阅读量
Dec 14 Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
Apr 05 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
May 04 Python
python3 对list中每个元素进行处理的方法
Jun 29 Python
python实现多张图片拼接成大图
Jan 15 Python
使用Tensorflow实现可视化中间层和卷积层
Jan 24 Python
Python实现名片管理系统
Feb 14 Python
基于virtualenv创建python虚拟环境过程图解
Mar 30 Python
OpenCV3.3+Python3.6实现图片高斯模糊
May 18 Python
Django如何防止定时任务并发浅析
May 14 #Python
python3 pygame实现接小球游戏
May 14 #Python
Django 多环境配置详解
May 14 #Python
python仿evething的文件搜索器实例代码
May 13 #Python
python爬虫租房信息在地图上显示的方法
May 13 #Python
详解如何设置Python环境变量?
May 13 #Python
详解python运行三种方式
May 13 #Python
You might like
php随机取mysql记录方法小结
2014/12/27 PHP
详解PHP中的Traits
2015/07/29 PHP
php实现QQ小程序发送模板消息功能
2019/09/18 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
2019/10/15 PHP
给moz-firefox下添加IE方法和属性
2007/04/10 Javascript
jquery select选中的一个小问题
2009/10/11 Javascript
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码
2011/09/21 Javascript
javascript窗口宽高,鼠标位置,滚动高度(详细解析)
2013/11/18 Javascript
详解javascript实现自定义事件
2016/01/19 Javascript
深入理解关于javascript中apply()和call()方法的区别
2016/04/12 Javascript
JavaScript实现多栏目切换效果
2016/12/12 Javascript
Vue 父子组件、组件间通信
2017/03/08 Javascript
jQuery实现的表格前端排序功能示例
2017/09/18 jQuery
selenium+java中用js来完成日期的修改
2019/10/31 Javascript
vue与iframe之间的信息交互的实现
2020/04/08 Javascript
[00:43]拉比克至宝魔导师密钥展示
2018/12/20 DOTA
python迭代器的使用方法实例
2013/11/21 Python
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
详谈在flask中使用jsonify和json.dumps的区别
2018/03/26 Python
Windows下安装Django框架的方法简明教程
2018/03/28 Python
Flask框架响应、调度方法和蓝图操作实例分析
2018/07/24 Python
pytorch permute维度转换方法
2018/12/14 Python
django删除表重建的实现方法
2019/08/28 Python
python面向对象之类属性和类方法案例分析
2019/12/30 Python
python为什么要安装到c盘
2020/07/20 Python
HTML5 Canvas实现放大镜效果示例
2020/03/25 HTML / CSS
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
Tiqets英国:智能手机上的文化和娱乐门票
2019/07/10 全球购物
现金会计岗位职责
2013/12/05 职场文书
银行简历自我评价
2014/02/11 职场文书
电工工作职责范本
2014/02/22 职场文书
葬礼司仪主持词
2014/03/31 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
初婚初育证明范本
2014/11/24 职场文书
推普标语口号大全
2015/12/26 职场文书