python的正则表达式

简介

正则表达式(Regular Expression)是一种文本模式,通过特定字符的组合定义规则,用于检索、替换或验证符合该规则的字符串,对应的内置模块为re。

功能:快速从字符串中提取想要的字符(串)

re模块中的常用函数

match() 

re.match(pattern,string,flag=0)

#从头开始查找,只要找到一个就返回,找不到则返回None

group()显示其匹配的字符串,start()开始的序号,end()结束的序号

text7='xb12315 hc12306 xf119 jj120 jc110'
tmp=re.match(r'\d+',text7)
if tmp:
    print(tmp,'匹配到的字符串为:',tmp.group())
    print('位置信息:',tmp.span(), '开始的序号:',tmp.start(),'结尾的序号:',tmp.end())
else:
    print('没有匹配上')

#输出
没有匹配上

search()

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

#查找所有,但返回第一个match对象,找不到返回None,建议优先使用该方法替换match

group()显示其匹配的字符串,start()开始的序号,end()结束的序号

text7='xb12315 hc12306 xf119 jj120 jc110'

tmp=re.search(r'\d+',text7)
if tmp:
    print(tmp,'匹配到的字符串为:',tmp.group())
    print('位置信息:',tmp.span(), '开始的序号:',tmp.start(),'结尾的序号:',tmp.end())
else:
    print('没有匹配上')

#输出
<re.Match object; span=(2, 7), match='12315'> 匹配到的字符串为: 12315
位置信息: (2, 7) 开始的序号: 2 结尾的序号: 7

findall()

re.findall(pattern,string,flag=0)

#查找所有,返回列表,若找不到则返回空列表

text7='xb12315 hc12306 xf119 jj120 jc110'
print(re.findall('\d+',text7))

#输出
['12315', '12306', '119', '120', '110']

split()

re.split(pattern,string,maxsplit=0,flag=0)

#切割,与字符的split()作用一样,但功能更强,返回切割后的列表

text7='xb12315 hc12306 xf119 jj120 jc110'


print(re.split(r'\W+',text7))

print(re.split(r'\s',text7))

#输出
['xb12315', 'hc12306', 'xf119', 'jj120', 'jc110']
['xb12315', 'hc12306', 'xf119', 'jj120', 'jc110']

sub()

re.sub(pattern,repl,strings,count=0,flag=0)

#替换,与replace()类似,将字符串中满足pattern的字符串替换为repl,替换次数为count,若是一次也没匹配到,则返回原始字符串

import re

text7='xb12315 hc12306 xf119 jj120 za110'
print(re.sub('\d+','123456789',text7))

#输出
xb123456789 hc123456789 xf123456789 jj123456789 za123456789

finditer()

finditer(pattern,strings,flag=0)

# 查找 返回一个匹配结果的迭代类型,每个迭代元素是match对象

import re
text7='xb12315 hc12306 xf119 jj120 za110'

matcher=re.finditer('[a-z]{2}\d+',text7)
for match_one in matcher:
    print(match_one.group(),type(match_one))

#输出
xb12315 <class 're.Match'>
hc12306 <class 're.Match'>
xf119 <class 're.Match'>
jj120 <class 're.Match'>
za110 <class 're.Match'>

常见的匹配格式pattern

单个字符

pattern 含义
'.' 任意字符
‘[]’ 枚举具体的字母数字等
'\n' 换行
'\t' 制表符
'\s' 空格
'\w' 字母数字和下划线
'\d' 数字
'\W' 非  字母、数字、下划线
'\D' 非数字
'\S' 非空格
'\b' 单词的边界
'\B' 非  单词边界
'^' 字符串的开头
'$' 字符串的结尾
'\b' 单词的便捷
'a|b' a或b
'(abc)' 匹配字符串abc
'\' 转义字符,不单独用,与()[] {} 等结合使用

字符的数量

pattern 含义 示例
* 0次或者任意次 ‘[0-9]*’ 匹配任意次0-9的数字
‘+’ 1次或者任意次
'?' 0次或者1次
'{n} n次
'{n,m}'

n到m次

'{n,}' n次及以上以上
'{,m}' 至多m次

最小匹配

正则默认为贪婪模式,加上?可以变为最小模式

pattern 含义 示例
*? 0次或者任意次,取少的

re.search('(abc)*?',‘abcabc’).group()

#输出空

‘+?’ 1次或者任意次,取少的

re.search('(abc)+?',‘abcabc’).group()

#输出abc

'??' 0次或者1次,取少的

re.search('(abc)??',‘abcabc’).group()

#输出空

'{n,m}?'

n次或者0次,取少的

匹配模式flag

pattern 含义 示例
re.I 忽略大小写

text6="a bc def\n\
b is 98 c is 99"
print(re.search('^B is\s\d+', text6,re.M|re.I).group())

#输出b is 98

re.M 多行匹配

text6="a bc def\n\
b is 98 c is 99"
re.search('^b is\s\d+', text6,re.M).group()

#输出b is 98

re.A ascii模式
re.U Unicode字符解析
re.X 增加可读性,忽略空格和#后面注释
re.U Unicode字符解析

转载请说明出处内容投诉
CSS教程网 » python的正则表达式

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买