使用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多重继承新算法C3介绍
Sep 28 Python
python使用点操作符访问字典(dict)数据的方法
Mar 16 Python
详解python的几种标准输出重定向方式
Aug 15 Python
python使用itchat实现手机控制电脑
Feb 22 Python
解决Pycharm无法import自己安装的第三方module问题
May 18 Python
python环形单链表的约瑟夫问题详解
Sep 27 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
Dec 18 Python
python 读写文件包含多种编码格式的解决方式
Dec 20 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
May 11 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
Nov 18 Python
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
Apr 27 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字符串的递增和递减示例介绍
2014/02/11 PHP
php实现面包屑导航例子分享
2015/12/19 PHP
JavaScript XML实现两级级联下拉列表
2008/11/10 Javascript
仿微博字符限制效果实现代码
2012/04/20 Javascript
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
微信小程序 form组件详解及简单实例
2017/01/10 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
2017/02/19 Javascript
jQuery实现form表单序列化转换为json对象功能示例
2018/05/23 jQuery
angularJS1 url中携带参数的获取方法
2018/10/09 Javascript
通过实例解析vuejs如何实现调试代码
2020/07/16 Javascript
基于JavaScript实现简单的轮播图
2021/03/03 Javascript
[54:30]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
在Python中用has_key()方法查找键是否存在的教程
2015/05/21 Python
Python中functools模块的常用函数解析
2016/06/30 Python
Python selenium文件上传方法汇总
2020/11/19 Python
Anaconda2 5.2.0安装使用图文教程
2018/09/19 Python
python格式化输出保留2位小数的实现方法
2019/07/02 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
python list数据等间隔抽取并新建list存储的例子
2019/11/27 Python
YUV转为jpg图像的实现
2019/12/09 Python
Python requests.post方法中data与json参数区别详解
2020/04/30 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
2020/09/26 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
用CSS3将你的设计带入下个高度
2009/08/08 HTML / CSS
设计师珠宝:Ylang 23
2018/05/11 全球购物
测试驱动开发的主要步骤是什么
2014/12/10 面试题
关于护士节的演讲稿
2014/05/26 职场文书
学习焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
入党自传范文2015
2015/06/26 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
毕业生就业推荐表自我鉴定
2019/06/20 职场文书
读完《骆驼祥子》的观后感!
2019/07/05 职场文书
Python实战之实现康威生命游戏
2021/04/26 Python