python 正则表达式

正则表达式的介绍

1)在实际开发过程中经常会有查找符合某些复杂规则的字符串的需要,比如:邮箱、手机号码等,这时候想匹配或者查找符合某些规则的字符串就可以使用正则表达式了。
2)正则表达式就是记录文本规则的代码

re模块

在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用一个 re 模块

# 导入re模块
import re
# 使用match方法进行匹配操作
result = re.match(正则表达式,要匹配的字符串)
# 如果上一步匹配到数据的话,可以使用group方法来提取数据
result.group()

# 导入re模块
import re

# 使用match方法进行匹配操作
result = re.match("test","test.cn")
# 获取匹配结果
info = result.group()
print(info)

结果:
test




re.match() 根据正则表达式从头开始匹配字符串数据如果第一个匹配不成功就会报错

匹配单个字符

在这里插入图片描述

1.匹配任意一个字符

# 匹配任意一个字符
import re

ret = re.match(".","x")
print(ret.group())

ret = re.match("t.o","too")
print(ret.group())

ret = re.match("o.e","one")
print(ret.group())

运行结果:
x
too
one

# 注 防止转移 真实的.  可以加\
re.match("[\[\]]",']')


2.匹配[ ]中列举的字符

import re

ret = re.match("[hH]","hello Python")
print(ret.group())
ret = re.match("[hH]","Hello Python")
print(ret.group())

运行结果:
h
H

re.match['[A-Za-z','a']



# 取反符号(仅限中括号)^   另一种用法是以什么开头
# 匹配除了5以外的数字
result = re.match('[^5]','0')

3.\d匹配数字,即0-9

import re

ret = re.match("神州\d号","神州6号")
print(ret.group())

运行结果:
神州6

4.\D匹配非数字,即不是数字

non_obj = re.match("\D", "s")
print(non_obj .group())

运行结果:
s

5.\s匹配空白,即 空格,tab键

match_obj = re.match("hello\sworld", "hello world")
print(match_obj .group())

运行结果:
hello world

6.\S匹配非空白

match_obj = re.match("hello\Sworld", "hello&world")
result = match_obj.group()
print(result)

运行结果:
hello&world

7.\w匹配非特殊字符,即a-z、A-Z、0-9、_、汉字

match_obj = re.match("\w", "A")
result = match_obj.group()
print(result)

运行结果:
A

8.\W匹配特殊字符,即非字母、非数字、非汉字

match_obj = re.match("\W", "&")
result = match_obj.group()
print(result)

运行结果:
&

匹配多个字符

都是与前一个字符搭配
未完待续......

1. 匹配前一个字符出现0次或者无限次,即可有可无*

import re
#需求:匹配一个字符串第一个字母为大写,后面都是小写字母并且这些小写字母可有可无
ret = re.match("[A-Z][a-z]*","X")
print(ret.group())

ret = re.match("[A-Z][a-z]*","XxxX")
print(ret.group())

ret = re.match("[A-Z][a-z]*","Aabcdef")
print(ret.group())

结果
X
Xxx
Aabcdef

2.+匹配前一个字符出现1次或者无限次,即至少有1次

需求:匹配一个字符串,第一个字符是t,最后一个字符串是o,中间至少有一个字符
import re

match_obj = re.match("t.+o", "two")
print(match_obj.group())

结果
two

3.?匹配前一个字符出现1次或者0次,即要么有1次,要么没有

需求:匹配出这样的数据,但是https 这个s可能有,也可能是http 这个s没有
import re
match_obj = re.match("https?", "http")
print(match_obj.group())

结果
https

4.{m}匹配前一个字符出现m次

#需求:匹配出11位数字
import re

ret = re.match("1[35678]\d{9}","15232659861")
print(ret.group())

结果
15232659861

5.{m,n}表示匹配前一个字符出现从m到n次

需求:匹配出,820位的密码,可以是大小写英文字母、数字、下划线
import re
ret = re.match("[a-zA-Z0-9_]{8,20}","helloword")
print(ret.group())

结果
helloword

需要强调的是,re.match()是从开头开始匹配,哪怕超过20位也只会匹配20位

import re
ret = re.match("[a-zA-Z0-9_]{8,20}","01234567890123456789xxx")
print(ret.group())

结果
01234567890123456789

匹配开头和结尾

在这里插入图片描述

1.^匹配字符串开头

# 匹配以数字开头的数据
import re
match_obj = re.match("^\d.*", "3python")
print(match_obj .group())

结果
3python

2.$匹配字符串结尾

# 匹配以数字结尾的数据
import re
match_obj = re.match(".*\d$", "python5")
print(match_obj .group())

结果
python3

3.^ 和 $

需求: 匹配以数字开头中间内容不管以数字结尾

match_obj = re.match("^\d.*\d$", "4python4")
print(match_obj .group())

结果
4python4

示例1:除了指定字符以外都匹配

需求: 第一个字符除了aeiou的字符都匹配

import re
match_obj = re.match("[^yello]", "h")

结果
h

匹配分组

在这里插入图片描述

1.| 匹配左右任意一个表达式

需求:在列表中["apple", "banana", "orange", "pear"],匹配apple和pear
import re

# 水果列表
fruit_list = ["apple", "banana", "orange", "pear"]

# 遍历数据
for value in fruit_list:
    # |    匹配左右任意一个表达式
    match_obj = re.match("apple|pear", value)
    if match_obj:
        print("%s是我想要的" % match_obj.group())
    else:
        print("%s不是我要的" % value)

结果:
apple是我想要的
banana不是我要的
orange不是我要的
pear是我想要的
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

季布,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值