python-正则基础

Posted KoishNee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-正则基础相关的知识,希望对你有一定的参考价值。

正则表达式,说的简单些,就是一个匹配的功能,在python中,只要引用 re 模块,就能进行正则匹配操作

一、math匹配

先来看一个简单的例子

import re
re.match(pattern, data_source)     #math为匹配,pattern为需要匹配的对象,data_source为数据源

 

查看下匹配的结果

import re
a = re.match(‘abc‘, ‘abcdefg‘)
b = re.match(‘abc‘, ‘bcdefg‘)
print(a)
print(b)

-----结果-----
<_sre.SRE_Match object; span=(0, 3), match=‘abc‘>       #a为匹配到的结果,返回的是一个正则的对象
None                                                    #b为没匹配到的结果

 

查看匹配到的具体结果,需要使用group方法:

import re
a = re.match(‘abc‘, ‘abcdefg‘)
print(a.group())

-----结果-----
abc

 

需要注意的是,math只能从字符串开头进行匹配

import re
a = re.match(‘abc‘, ‘aabcdefg‘)
if a:
    print(‘匹配成功‘)
else:
    print(‘匹配失败‘)

-----结果-----
匹配失败

 

在math中除了有group方法查看匹配到的内容外,还有以下几个方法:

import re
a = re.match(‘abc‘, ‘abcdefg‘)
print(a.start())                 #查看匹配开始的位置
print(a.end())                   #查看匹配结束的位置
print(a.span())                  #查看匹配开始和结束的位置

-----结果-----
0
3
(0, 3)

  

如果想要匹配任意数字,可以这样写:

import re
a = re.match(‘[0-9]‘, ‘1234abc‘)                #[0-9]为匹配任意一个数字
b = re.match(‘[0-9]{1,9}‘, ‘1234abc‘)           #[0-9]{1,9}为匹配任意1到9个数字
print(a.group())
print(b.group())

-----结果-----
1
1234

 

二、search

在上文中介绍了math,math是只能从开头进行匹配,如果想从整个字符串的任意位置进行匹配,我们可以使用search:

import re
a = re.search(‘\d‘, ‘b1234abc123‘)     #\d为匹配任意十进制数,相当于[0-9]
print(a.group())

-----结果-----
1

需要注意的是,search只要是匹配到了内容,后面的内容就不会进行匹配了

 

三、findall

findall方法能够以列表的形式返回能匹配的子串,看例子:

import re
a = re.findall(‘[0-9]‘, ‘1234abc123‘)
b = re.findall(‘[0-9]{0,9}‘, ‘1234abc123‘)      
c = re.findall(‘[0-9]{1,9}‘, ‘1234abc123‘)
print(a)
print(b)
print(c)

-----结果-----
[‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘1‘, ‘2‘, ‘3‘]
[‘1234‘, ‘‘, ‘‘, ‘‘, ‘123‘, ‘‘]              #由于{0,9}是可以匹配到0个数字,因此最终的结果中会匹配到空的字符串
[‘1234‘, ‘123‘]                              #改为{1,0}后,就无法匹配到0个数字啦

  

四、sub和subn

之前介绍的几个方法中,只能查看到匹配的结果,如果我们想把匹配到的内容换成另外的内容,就可以使用sub和subn,就是通常意义上的替换

import re
a = re.sub(‘a‘, ‘z‘, ‘b1234abc123aaa‘)          #把a换成z
b = re.subn(‘a‘, ‘z‘, ‘b1234abc123aaa‘)
print(a)
print(b)

-----结果-----
b1234zbc123zzz
(‘b1234zbc123zzz‘, 4)                           #使用subn时,会统计到匹配的次数

 

如果想要指定替换的次数,可以参入count的参数

import re
a = re.sub(‘a‘, ‘z‘, ‘b1234abc123aaa‘, count=1)
b = re.subn(‘a‘, ‘z‘, ‘b1234abc123aaa‘, count=1)
print(a)
print(b)

-----结果-----
b1234zbc123aaa
(‘b1234zbc123aaa‘, 1)

 

五、正则表达式

元字符说明
. 代表任意字符
| 逻辑或操作符
[ ] 匹配内部的任一字符或子表达式
[^] 对字符集和取非
- 定义一个区间
\ 对下一字符取非(通常是普通变特殊,特殊变普通)
* 匹配前面的字符或者子表达式0次或多次
*? 惰性匹配上一个
+ 匹配前一个字符或子表达式一次或多次
+? 惰性匹配上一个
? 匹配前一个字符或子表达式0次或1次重复
{n} 匹配前一个字符或子表达式
{m,n} 匹配前一个字符或子表达式至少m次至多n次
{n,} 匹配前一个字符或者子表达式至少n次
{n,}? 前一个的惰性匹配
^ 匹配字符串的开头
\A 匹配字符串开头
$ 匹配字符串结束
[\b] 退格字符
\c 匹配一个控制字符
\d 匹配任意数字
\D 匹配数字以外的字符
\t 匹配制表符
\w 匹配任意数字字母下划线
\W 不匹配数字字母下划线

 

以上是关于python-正则基础的主要内容,如果未能解决你的问题,请参考以下文章

python 正则表达式 re模块基础

循环通过 python 正则表达式匹配

Python基础13_正则表达式,re模块,

Python 基础入门 8_1 正则表达式

python 基础 正则,递归 生成器

通过 Java 正则表达式提取 semver 版本字符串的片段