Python-re模块

0 前言

>>返回Python系列文章目录<<

正则表达式(英文名称:regular expression,regex,RE)是用来简洁表达一组字符串特征的表达式。最主要应用在字符串匹配中。

re模块是python中处理正则表达式的一个模块,通过re模块的方法,把正则表达式pattern编译成正则对象,以便使用正则对象的方法

1 re模块(内置库)

re模块是Python的内置库,无需安装

str为需要检索的字符串

pattern可以是两种数据类型,一种类型为正则表达式的字符串表达方式,如‘\d{9}’。另一种是使用re.compile()方法将表达式编译为Pattern类

  • pattern是字符串类型只能使用re.match(pattern, str)这样的写法
  • pattern是Pattern类可以使用re.match(pattern, str)pattern.match(str)两种写法

事实上,每次re.match(pattern, str)系统都会调用re.compile()pattern从字符串处理为Pattern类,所以手动调用re.compile()可以提高运行速度

编程语言将\定义为转义字符,r表示raw string 意思是原生字符,也就是说是这个字符串中间的特殊字符不用转义,比如你要表示‘\n’,可以这样:r'\n',但是如果你不用原生字符而是用字符串你得这样:‘\\n’。原生字符还有函数表示法repr(str)

re.match()re.search()方法返回的是Match类Match类可通过group()方法得到对应的字符串

1.1 方法列表

re模块说明
re.compile(pattern) -> Pattern将字符串转为正则式,返回Pattern类
pattern->字符串
re.fullmatch(pattern, str) -> Match
re.fullmatch(pattern, str) -> None
匹配整个字符串,返回Match类None
pattern->正则式或字符串
re.match(pattern, str) -> Match
re.match(pattern, str) -> None
从头开始检测匹配的第一个子串,返回Match类None
pattern->正则式或字符串
re.search(pattern, str) -> Match
re.search(pattern, str) -> None
检测第一个匹配的子串,返回Match类None
pattern->正则式或字符串
re.findall(pattern, str) -> list of str
re.findall(pattern, str) -> []
返回匹配的子串的列表
pattern->正则式或字符串
re.finditer(pattern, str) -> Iter of str
re.finditer(pattern, str) -> None
返回匹配的子串的迭代器
pattern->正则式或字符串
re.split(pattern, str) -> list of str按pattern子串分割str,返回列表
pattern子串自身占一个空字符串元素
pattern->正则式或字符串
re.sub(pattern, repl, str) -> str将str中满足正则式的子串替换为repl
pattern->正则式或字符串
repl->字符串
re.subn(pattern, repl, str) -> (str, num)sub()的结果和替换次数打包为元组,返回元组
pattern->正则式或字符串
repl->字符串
self=Pattern类说明
self.fullmatch(str) -> Match
self.fullmatch(str) -> None
匹配整个字符串,返回Match类None
self.match(str) -> Match
self.match(str) -> None
从头开始检测匹配的第一个子串,返回Match类None
self.search(str) -> Match
self.search(str) -> None
检测第一个匹配的子串,返回Match类None
self.findall(str) -> list of str
self.findall(str) -> []
搜索str返回匹配的子串的列表,返回列表
self.finditer(str) -> Iter of str
self.finditer(str) -> None
搜索str返回匹配的子串的迭代器,返回迭代器
self.split(str) -> list of str按pattern子串分割str
pattern子串自身占一个空字符串元素,返回列表
self.sub(repl, str) -> str将str中满足正则式的子串替换为repl,返回字符串
self.subn(repl, str) -> (str, num)sub()的结果和替换次数打包为元组,返回元组
self=Match类说明
self.group(n) -> strMatch类转为字符串
n ->省略或为0时,返回所有结果,n=1返回第一个结果

2 正则表达式

2.1 单字符匹配符号

此处所有语法都代表一个字符,尤其是中括号[]中的内容无论有多长,都只会匹配一个字符

注意,转义的\n, \t是一个字符,而未转义的r'\n', r'\t'是两个字符,正则表达式都是用未转义字符

单字符匹配符号说明
.匹配一个任意字符,除\n以外,等效为[^\n]
\w匹配一个变量字符,包括数字,字母或者下划线字符,等效为[0-9a-zA-Z_]
\W匹配一个非变量字符,等效为[^w]
\s匹配一个空白字符,包括空格,\n或者\t,等效为[ \n\t]
\S匹配一个非空白字符,等效为[^s]
\d匹配一个数字字符,等效为[0-9]
\D匹配一个非数字字符,等效为[^d]
[pattern]匹配括号中出现的任意一个字符或者Unicode编码区间内任意一个字符
[abc], [\d+], [1-9], [a-z], [A-Z], [a-Z]
[^pattern]匹配括号中没出现的任意一个字符或者Unicode编码区间外任意一个字符
[^abc], [^\d+], [^1-9], [^a-z], [^A-Z], [^a-zA-Z]
[][]中的符号作为纯文本,不具有特殊定义,如匹配括号用[(][)]

2.2 多字符匹配符号

使用小括号()包围的连续字符视为一个整体进行逻辑处理

(pattern)表示获取()内容,(?:pattern)表示不获取()内容

  • 当正则式中没有()时,默认获取整个正则式匹配的内容
  • 当正则式中有一个()时,在整个正则式匹配的基础上,获取()内的内容
  • 当正则式中有多个()时,在整个正则式匹配的基础上,以元组方式获取所有()内的内容
多字符匹配符号说明
(pattern)将多个字符匹配符号组成块,统一进行处理并获取内容
(?:pattern)将多个字符匹配符号组成块,统一进行处理但不获取内容
(pattern1|pattern2)多个字符块只需要匹配一个,但第一个成功后不会再尝试匹配第二个
r'(aa|bb)'匹配aa或者bb,而r'aa|bb'匹配aababb
(?:pattern1|pattern2)多个字符块只需要匹配一个,但不获取内容

2.3 次数检测符号

贪婪匹配返回符合条件的最大匹配区间,非贪婪匹配返回符合条件的最小匹配区间

次数检测符号说明
?上个单字符或多字符匹配0次或1次,等效于{0,1},非贪婪匹配
*上个单字符或多字符匹配0次或多次,等效于{0,},贪婪匹配
+上个单字符或多字符匹配1次或多次,等效于{1,},贪婪匹配
+?上个单字符或多字符匹配1次或多次,等效于{1,}?,非贪婪匹配
{}指定上个单字符或多字符次数,{N} 匹配N次,{M,N}匹配M到N次 ,{M,}至少匹配M次 ,{,N}最多匹配N次,贪婪匹配
{}?指定上个单字符或多字符次数,{N} 匹配N次,{M,N}匹配M到N次 ,{M,}至少匹配M次 ,{,N}最多匹配N次,非贪婪匹配

2.4 位置检测符号

位置检测符号说明
\b检测\b出现的位置是单词边界,\b本身不占字符
单词边界: 字符串开始和结尾、空格、换行、标点符号等,可以将两个单词隔开的字符都单词边界
\B检测\B出现的位置不是单词边界
^pattern检测pattern是否是字符串开头
pattern$检测pattern是否是字符串结尾

3 示例

  1. 贪婪匹配与非贪婪匹配
result = re.findall('\w+', 'fun%_list')
print(result)

>>>['fun', '_list']
result = re.findall('\w+?', 'fun%_list')
print(result)

>>>['fun', '_list']

  1. 获取和非获取
result = re.findall('\w+%_\w+', 'fun%_list')
print(result)

>>>['fun_list']
result = re.findall('(\w+)%_\w+', 'fun%_list')
print(result)

>>>['fun']
result = re.findall('(\w+)%_(\w+)', 'fun%_list')
print(result)

>>>[('fun', 'list')]

>>返回Python系列文章目录<<

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值