Python 正则表达式(RegEx)

版权所有,未经许可,禁止转载


章节

Python 介绍
Python 开发环境搭建
Python 语法
Python 变量
Python 数值类型
Python 类型转换
Python 字符串(String)
Python 运算符
Python 列表(list)
Python 元组(Tuple)
Python 集合(Set)
Python 字典(Dictionary)
Python If … Else
Python While 循环
Python For 循环
Python 函数
Python Lambda
Python 类与对象
Python 继承
Python 迭代器(Iterator)
Python 模块
Python 日期(Datetime)
Python JSON
Python 正则表达式(RegEx)
Python PIP包管理器
Python 异常处理(Try…Except)
Python 打开文件(File Open)
Python 读文件
Python 写文件
Python 删除文件与文件夹


正则表达式是组成搜索模式的字符序列。

正则表达式用于按指定的搜索模式搜索字符串。

正则表达式(RegEx)模块

Python有一个名为re的内置包,用来处理正则表达式。

示例

导入re模块:

import re

Python中的正则表达式

导入re模块后,就可以开始使用正则表达式:

示例

搜索字符串,查看是否以“the”开头,以“Spain”结尾:

import re

txt = "The rain in Spain"
x = re.search("^The.*Spain$", txt)

正则表达式函数

re模块提供了一组函数,用于搜索匹配的字符串:

<table>
<tbody><tr>
<th style="width:20%;">函数</th>
<th>描述</th>
</tr>
<tr>
<td>findall</td>
<td>返回包含所有匹配项的列表</td>
</tr>
<tr>
<td>search</td>
<td>如果文本中有匹配项,则返回匹配对象</td>
</tr>
<tr>
<td>split</td>
<td>使用字符串分割文本,返回文本被分割后的列表 </td>
</tr>
<tr>
<td>sub</td>
<td>用字符串替换一个或多个匹配项/td>
</tr>
</tbody></table>

元字符

元字符是具有特殊意义的字符:

<table>
<tbody><tr>
<th >字符</th>
<th>描述</th>
<th>例子</th>
</tr>
<tr>
<td>[]</td>
<td>字符集合</td>
<td>"[a-m]"</td>
</tr>
<tr>
<td></td>
<td>标志特殊转义字符(也可以用来转义特定字符)</td>
<td>"\d"</td>
</tr>
<tr>
<td>.</td>
<td>任何字符(换行字符除外)</td>
<td>"he..o"</td>
</tr>
<tr>
<td>^</td>
<td>开始文本</td>
<td>"^hello"</td>
</tr>
<tr>
<td></td> <td>结束文本</td> <td>"world"</td>
</tr>
<tr>
<td></td>
<td>0次或多次出现</td>
<td>"aix
"</td>
</tr>
<tr>
<td>+</td>
<td>1次或多次出现</td>
<td>"aix+"</td>
</tr>
<tr>
<td>{}</td>
<td>确定的出现次数</td>
<td>"al{2}"</td>
</tr>
<tr>
<td>|</td>
<td>或者</td>
<td>"falls|stays"</td>
</tr>
<tr>
<td>()</td>
<td>捕获并分组</td>
<td> </td>
</tr>
</tbody></table>

特殊转义字符

特殊转义字符是\后面跟着下面列表中的某个字符,有特殊的含义:

<table>
<tbody><tr>
<th>字符</th>
<th>描述</th>
<th>例子</th>
</tr>
<tr>
<td>\A</td>
<td>如果指定字符串位于文本的开头,则返回匹配项</td>
<td>"\AThe"</td>
</tr>
<tr>
<td>\b</td>
<td>如果指定字符串位于文本开头或结尾,则返回匹配项</td>
<td>r"\bain"
r"ain\b"</td>
</tr>
<tr>
<td>\B</td>
<td>如果指定字符串没有位于文本开头或结尾,则返回匹配项</td>
<td>r"\Bain"
r"ain\B"</td>
</tr>
<tr>
<td>\d</td>
<td>如果文本中包含了数字(0-9),返回匹配项</td>
<td>"\d"</td>
</tr>
<tr>
<td>\D</td>
<td>如果文本中不包含数字(0-9),返回匹配项</td>
<td>"\D"</td>
</tr>
<tr>
<td>\s</td>
<td>返回文本中包含空白字符的匹配项</td>
<td>"\s"</td>
</tr>
<tr>
<td>\S</td>
<td>返回文本中不包含空白字符的匹配项</td>
<td>"\S"</td>
</tr>
<tr>
<td>\w</td>
<td>如果文本中包含任何单词字符(从a到Z的字符,从0到9的数字,以及下划线字符),返回匹配项</td>
<td>"\w"</td>
</tr>
<tr>
<td>\W</td>
<td>如果文本中不包含任何单词字符(从a到Z的字符,从0到9的数字,以及下划线
字符),返回匹配项</td>
<td>"\W"</td>
</tr>
<tr>
<td>\Z</td>
<td>如果指定的字符串位于文本末尾,则返回匹配项</td>
<td>"Spain\Z"</td>
</tr>
</tbody></table>

集合

集合是一对方括号[]中的一组字符,具有特殊的含义:

<table>
<tbody><tr>
<th>Set</th>
<th>描述</th>
</tr>
<tr>
<td>[arn]</td>
<td>返回匹配指定字符(a、r或n)之一的匹配项</td>
</tr>
<tr>
<td>[a-n]</td>
<td>返回匹配任意a和n之间,小写字符的匹配项</td>
</tr>
<tr>
<td>[^arn]</td>
<td>返回匹配除a、r和n之外的任何字符的匹配项</td>
</tr>
<tr>
<td>[0123]</td>
<td>返回匹配指定数字(0、1、2或3)的匹配项</td>
</tr>
<tr>
<td>[0-9]</td>
<td>返回匹配0到9之间任意数字的匹配项</td>
</tr>
<tr>
<td>[0-5][0-9]</td>
<td>返回匹配从00到59的任意两位数的匹配项</td>
</tr>
<tr>
<td>[a-zA-Z]</td>
<td>返回匹配按字母顺序在a和z之间、小写或大写的任何字符的匹配项</td>
</tr>
<tr>
<td>[+]</td>
<td>在集合中,+,*,.,|,(),$,{}没有特殊的含义,所以[+]的意思是: 返回字符串中"+"字符的匹配项</td>
</tr>
</tbody></table>

findall()函数

findall()函数返回一个包含所有匹配项的列表。

示例

打印包含所有匹配项的列表:

import re

str = "The rain in Spain"
x = re.findall("ai", str)
print(x)

列表中的匹配项按找到的顺序排序。

如果没有找到匹配项,返回一个空列表:

示例

打印所有匹配项的列表:

import re

str = "The rain in Spain"
x = re.findall("Portugal", str)
print(x)

search() 函数

search() 搜索文本中的匹配项,如果有匹配项,返回匹配对象。

如果有多个匹配项,只返回第一个:

示例

搜索文本中的第一个空白字符:

import re

str = "The rain in Spain"
x = re.search("\s", str)

print("第一个空白字符位于:", x.start())

如果没有找到匹配项,则返回None值:

示例

不匹配:

import re

str = "The rain in Spain"
x = re.search("Portugal", str)
print(x)

split() 函数

split()函数使用字符串分割文本,返回文本被分割后的列表:

示例

在每个空白字符处分割文本:

import re

str = "The rain in Spain"
x = re.split("\s", str)
print(x)

可以通过指定maxsplit参数来控制分割次数:

示例

只在第一次匹配时分割字符串:

import re

str = "The rain in Spain"
x = re.split("\s", str, 1)
print(x)

sub() Function

将匹配项替换为指定文本:

示例

用数字9替换每个空白字符:

import re

str = "The rain in Spain"
x = re.sub("\s", "9", str)
print(x)

可以通过count参数来控制替换的数量:

示例

替换前两项:

import re

str = "The rain in Spain"
x = re.sub("\s", "9", str, 2)
print(x)

匹配对象

匹配对象是一个包含搜索和结果信息的对象。

注意: 如果没有匹配,则返回None值,而不是匹配对象。

示例

搜索一下,将返回一个匹配对象:

import re

str = "The rain in Spain"
x = re.search("ai", str)
print(x) #打印对象

匹配对象具有用于检索搜索信息的属性和方法:

  • .span() 返回一个元组,其中包含匹配项的开始和结束位置。
  • .string 返回传递给函数的文本
  • .group() 返回文本中匹配的部分

示例

打印第一个匹配项的位置(开始和结束位置)。

正则表达式查找任何以大写字母“S”开头的单词:

import re

str = "The rain in Spain"
x = re.search(r"\bS\w+", str)
print(x.span())

示例

打印传入函数的文本:

import re

str = "The rain in Spain"
x = re.search(r"\bS\w+", str)
print(x.string)

示例

打印文本中匹配的部分。

正则表达式查找任何以大写字母“S”开头的单词:

import re

str = "The rain in Spain"
x = re.search(r"\bS\w+", str)
print(x.group())

注意: 如果没有匹配,则返回None值,而不是匹配对象。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容