正则表达式

正则表达式是强大的字符串处理工具,Python通过re模块提供支持。本文介绍了re模块的主要方法,如compile、search、match、fullmatch、split、findall、finditer、sub和subn,并详细阐述了正则对象和匹配对象的方法,帮助读者全面理解并掌握Python正则表达式。
摘要由CSDN通过智能技术生成

1. 简介

正则表达式是一个强大的字符串处理工具,几乎所有的字符串操作都可以通过正则表达式来完成,其本质是一个特殊的字符序列,可以方便的检查一个字符串是否与我们定义的字符序列的某种模式相匹配。

正则表达式并不是 Python 所特有的,几乎所有编程语言都支持正则表达式,Python 提供了内置模块 re 和第三方模块 regex 来支持正则表达式,regex 模块提供了与 re 模块兼容的 API 接口,同时还提供了额外的功能和更全面的 Unicode 支持,本文只介绍 re 模块。

2. 使用

2.1 语法

我们先来熟悉一下正则表达式的基本语法。

字符 说明
. 默认情况,匹配除了换行的任意字符;如果指定了标签 DOTALL,则匹配包括换行符的任意字符
^ 匹配字符串的开头,在 MULTILINE 模式也匹配换行后的首个符号
$ 匹配字符串尾或者换行符的前一个字符,在 MULTILINE 模式匹配换行符的前一个字符
* 匹配前一个字符 0 到无限次
+ 匹配前一个字符 1 到无限次
? 匹配前一个字符 0 次或 1 次
{m} 匹配前一个字符 m 次
{m, n} 匹配前一个字符 m 到 n 次
*? +? ?? {m,n}? 使 *、+、?、{m,n} 变成非贪婪模式,也就是使这些匹配次数不定的表达式尽可能少的匹配
\ 转义特殊字符
[...] 用于表示一个字符集合
| 匹配 | 两边任意表达式
(...) 将括起来的表达式分组,
(?aiLmsux) aiLmsux 每一个字符代表一个匹配模式,可选多个
(?:…) (…) 的不分组版本
(?P<name>…) 分组,除了原有的编号外再指定一个额外的别名
(?P=name) 引用别名为 name 的分组匹配到的字符串
(?#…) # 后面的将作为注释被忽略
(?=…) 匹配 … 的内容,但是并不消费样式的内容
(?!…) 匹配 … 不符合的情况
(?<=…) 匹配字符串的当前位置,它的前面匹配 … 的内容到当前位置
(?<!…) 匹配当前位置之前不是 … 的样式
(?(id/name)yes-pattern|no-pattern) 如果给定的 id 或 name 存在,将会尝试匹配 yes-pattern ,否则就尝试匹配 no-pattern,no-pattern 可选,也可以被忽略
\number 匹配数字代表的组合
\A 只匹配字符串开始
\b 匹配空字符串,但只在单词开始或结尾的位置
\B 匹配空字符串,但不能在词的开头或者结尾
\d 主要匹配数字 [0-9]
\D 匹配任何非十进制数字的字符
\s 匹配空白字符,主要包括:空格 \t \n \r \f \v
\S 匹配任何非空白字符
\w 匹配 [a-zA-Z0-9_]
\W 匹配非单词字符
\Z 只匹配字符串尾

2.2 re 模块

2.2.1 模块内容

re 模块几乎包含了正则表达式的所有功能,我们先来看一下该模块的主要方法。

re.compile(pattern, flags=0)

用于编译正则表达式,生成一个正则表达式(Pattern)对象,供 match() 和 search() 这两个函数使用。参数说明如下:

  • pattern : 一个字符串形式的正则表达式
  • flags : 匹配模式,包括如下:
参数 说明
re.A 让 \w, \W, \b, \B, \d, \D, \s, \S 只匹配 ASCII
re.I 忽略大小写
re.M 多行模式
re.L 由当前语言区域决定 \w, \W, \b, \B 和大小写敏感匹配
re.S . 匹配包括换行符在内的任意字符
re.U 在 Python3 中是冗余的,因为 Python3 中字符串已经默认为 Unicode
re.X 忽略空格和 # 后面的注释

看一下示例:

import re
re.compile(r'abc', re.I)

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

扫描整个字符串找到匹配样式的第一个位置,并返回一个相应的匹配对象;如果没有匹配,就返回一个 None。参数说明如下:

  • pattern:匹配的正则表达式
  • string:要匹配的字符串
  • flags:匹配模式

看一下示例:

import re
print(re
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值