正则
(1) 正则的基本概念
表达式由需要匹配的字符串和一些特殊字符组成,可以在字符串当中匹配出需要查找的对象。通过正则表达式快速快捷的匹配出符合要求的特征字符串,比如利用病毒的特征值来查找文本中的病毒。
def isPhone(phone):
if len(phone)==11 and phone.isdigit() and phone[0:2]=='13':
print('这是手机号')
else:
print('这不是手机号')
这是一段判断是否为手机号的代码,看起来很繁琐,条件很多,那么如果用正则该怎样表达呢?
import re
res = re.findall(r'^13\d{9}','13145678956') #^13代表是13开头的数字,\d{}代表后面还有9位数字
print(res)
可以看出来使用正则会更方便快捷的筛选出我们想要的数据。
import re
r = re.compile('\d') #提前写好正则表达式,方便后面进行数据匹配
print(r.findall('41354asc'))
当然正则表达式也可以像上面一样提前写好,不过这种方法一般用的很少,因为实际中我们所要处理的数据都是各种各样的。所以一般都是直接写正则的匹配式。
(2)re模块
① re.match()
匹配字符串开头,只匹配一次。
import re
st = 'this is python 2023'
res = re.match('this',st) #匹配字符串开头,只匹配一次
可以看到出现的是这种格式,其中span代表数据下标位置。如果我们想要打印指定内容可以:
import re
st = 'this is python 2023'
res = re.match('this',st) #匹配字符串开头,只匹配一次
print(res.span()) #获得match获取到的下标位置
print(res.group()) #获得match匹配到的数据
②re.search()
匹配整个字符串,只匹配一次。内容获取方法一样是res.span()和res.group()
③正则进行字符串替换:re.sub('被替换的内容',‘替换的内容’,’替换的位置‘,‘替换次数’)
import re
st = 'this is python 2023'
res = re.sub('t','T',st,1) #正则进行字符串替换
print(res)
④正则的字符串切割,与普通字符串切割不同,正则的切割支持多种切割方式。
import re
st = 'this is python 2023.03.06,zs'
res = re.split('[ ,.]',st) #通过空格逗号和点进行切割
print(res)
(3)元字符
字符 | 作用 |
---|---|
. | 通配符,匹配任意字符,除了\n以外 |
\ | 正则转义 |
^ | 匹配字符串开始位置,在[]表示不取字符 |
$ | 匹配字符串的结束位置 |
{} | 匹配字数 |
* | 匹配0次或多次 |
+ | 匹配一次或多次 |
? | 匹配0次或一次 |
[] | 字符集合 |
() | 分组分配 |
I | 或运算 分支条件 |
\d | 匹配数字 , D是匹配除了数字其他所有 |
\s | 匹配类似空格\n \t , S是匹配除此其他 |
\w | 匹配匹配字母数字下划线,W是其他包括特殊字符 |
\b | 代表边界,如\bis\b表示匹配is |
* | 表示0到多次 |
+ | 表示1到多次 |
? | 表示0到1次 |
.*? | 问号写在次数后边代表非贪婪模式,贪婪模式表示抛开范围尽可能多的获取 |
>()< | 尖括号帮忙匹配,加小括号是只保留小括号里的内容 |