-Python-正则匹配

Python-正则匹配

chenyang 60天前 141

re模块

match匹配

匹配字符串的开头,即只有开头包含正则的内容才算数。
语法:
re.match(pattern,string,flags=)

  • pattern为正则表达式
  • string为需要匹配的字符串
  • flags为一些特殊的标志,比如re.I代表忽略大小写

匹配后的返回值:
匹配成功:返回一个匹配的对象,使用这个对象的span()方法可以输出匹配的字符串的下标范围(左闭右开)。
匹配失败:返回None

import re

print(re.match(r'\d{2}', '12333'))
print(re.match(r'\d{2}', '12333').span())

运行结果:


(0, 2)

注意:这里的r代表raw的意思,我们需要把表达式原封不动的告诉解释器,防止它被转义。

search匹配

扫描整个字符串,并返回第一个成功的匹配
语法:
re.search(pattern,string,flags=)

  • pattern为正则表达式
  • string为需要匹配的字符串
  • flags为一些特殊的标志,比如re.I代表忽略大小写

匹配后的返回值:
匹配成功:返回一个匹配的对象,使用这个对象的span()方法可以输出匹配的字符串的下标范围(左闭右开)。
匹配失败:返回None

示例:

import re

print(re.search(r'\d{2}', 'qq12333', flags=re.I))
print(re.search(r'\d{2}', 'qqq12333').span())

运行结果:


(3, 5)

findall匹配

扫描整个字符串,并返回所有成功的匹配
语法:
re.findall(pattern,string,flags=)

  • pattern为正则表达式
  • string为需要匹配的字符串
  • flags为一些特殊的标志,比如re.I代表忽略大小写

匹配后的返回值:
匹配成功:返回一个列表,列表中为匹配的字符串。
匹配失败:返回None

示例:

import re

print(re.findall(r'\d{2}', 'qq12333', flags=re.I))
print(re.findall(r'\d{2}', 'qqq12333'))

运行结果:

['12', '33']
['12', '33']

正则元字符

元字符说明
.匹配任意一个字符,除了换行符
[]匹配中括号中的任意一个字符,如[0-9a-ZA-Z_]
[^sunck]匹配除了sunck以外的任意一个字符,^在中括号中为脱字符
\d匹配任意一个数字,等价于[0-9]
\D匹配任意一个非数字,等价于[^0-9]
\w匹配任意一个字母、数字及下划线,等价于[0-9a-zA-Z_]
\W匹配任意一个非字、数字及下划线
\s匹配任意一个空白符(空格、换行、回车、换页、制表)
\S匹配任意一个非空白符

锚字符:

锚字符说明
^行首匹配,在re.M的配合下支持换行匹配
$行尾匹配
\A匹配字符串开始,与^区别在于不支持对换行匹配re.M
\Z匹配字符串结束,与^区别在于不支持对换行匹配re.M
\b匹配单词和空格间的位置
\B匹配非单词边界

匹配多个字符:

多字符说明
(xyz)匹配小括号内的xyz,xyz是一个整体
x?匹配0个或1个x
x*匹配0个或任意多个x
x+匹配至少1个x
x{n}匹配n个x
x{n,}匹配至少n个x
x{n,m}匹配至少n个,最多m个x
x|y匹配x或y

split切割

使用re.split(pattern,string)可以用来切割字符串,返回一个列表。

比字符串的split()函数强大。

finditer函数

re.finditer(pattern,string,flags=)扫描整个字符串,返回的是一个迭代器,可以解决findall()数据量过大的问题。

sub和subn函数

提供字符串的替换和修改功能。
re.sub(pattern,repl,string,count=0,flags=0),返回值为替换后的字符串。
subn()与sub()类似,只是返回值形式不同,subn返回的是一个元组,元组中包含替换后的字符串和替换的次数。

  • pattern:正则表达式
  • repl:替换后的字符串
  • string:目标字符串
  • count:最多替换次数,如果不指定将替换所有的字符串

分组

用来提取匹配的字符串,用()表示分组。

tel = '010-999999'
m = re.match(r'(\d{3})-(\d{6})',tel)
# group(0)为tel这个原始字符串
print(m.group(0))
# group(1)为第一个括号的内容
print(m.group(1))
# group(2)为第二个括号的内容
print(m.group(2))
# groups()为整个分组的信息,元组
print(m.groups())

compile编译

当我们使用正则表达式时,re模块会干两件事:

  • 编译正则表达式,如果正则本身不合法会报错
  • 用编译后的正则去匹配对象

语法:
1、编译正则,相当于创建一个匹配的对象
re_tel = re.compile(pattern,flags=)
2、匹配
re_tel.match(string)

注意:这个对象有match、search、findall、finditer、sub(n)、split方法。

最新回复 (0)
返回
发新帖
0