正则表达式的简单介绍以及在Python的使用

目录

一、Python中使用正则表达式

二、正则表达式

    匹配开头结尾

    匹配单个字符

    匹配多个字符

    匹配分组

三、Python中正则表达式的其他函数调用


这是我自己通过看视频学习整理的笔记,有遗漏或需要改进的地方大家可以在评论区指正。

 re:正则表达式                     replace:用来替换的值                 str:要匹配的字符串

一、Python中使用正则表达式

re.match(r"re", "str")

使用正则表达式匹配字符串,用 .group()从返回值中提取字符串

match()函数会从str开头开始匹配,即默认为re添加^

eg:ret = re.match(r"re", "str")      print(ret.group())

import re

ret_1 = re.match(r"指环王\d", "指环王")
ret_2 = re.match(r"指环王\d", "指环王1")
ret_3 = re.match(r"指环王\d", "指环王22")
ret_4 = re.match(r"指环王\d$", "指环王333")

print(ret_1.group())
print(ret_2.group())
print(ret_3.group())
print(ret_4.group())

其中第2、3个输出不会报错,第1、4个输出会报错

3不报错是因为没有设置结尾匹配,前面匹配成功,group()可以提取到字符串,不报错

1报错是因为匹配不成功则ret_1为None,使用group()提取不到信息,报错

4报错是因为设置了以0~9有且仅有一个来结尾,但是要匹配的字符串有三个,报错

二、正则表达式

    匹配开头结尾

^匹配字符串的开头
$匹配字符串的结尾

注:不设置正则表达式以什么结尾的话,只要匹配的字符串前面匹配成功,就算后面还有字符也会算匹配成功,上面例子已演示,大家可以自己敲敲。

    匹配单个字符

.匹配任意一个字符,除了\n
[]匹配[]中列举的其中一个字符,如[135sad],只匹配其中一个
\d匹配数字字符,0~9
\D匹配非数字字符
\w

匹配单词(组成变量)字符,0~9、a~z、A~Z、_ 

注:有些系统或环境下是可以匹配中文的,使用前先验证一下,谨慎使用

\W匹配非单词字符
\s匹配空白字符,如空格与tab键
\S匹配非空白字符
  • 若要使用字符原本的意思,记得先使用 \ 转义,如 \. 表示 .
import re

ret_1 = re.match(r"指环王[123]", "指环王1")
ret_2 = re.match(r"指环王\w", "指环王_")
ret_3 = re.match(r"指环王\s", "指环王 ")

    匹配多个字符

*匹配前一个字符的0个或无限个,即可以没有
+匹配前一个字符的1个或无限个,即至少有一个
?匹配前一个字符的0个或1个
{m}匹配前一个字符的m个
{m,n}匹配前一个字符的m到n个
import re

ret_1 = re.match(r"\d?", "9")
ret_2 = re.match(r"\d+", "955513153")
ret_3 = re.match(r"abc\d{3,5}", "abc1513110")

 大家自己修改一下正则表达式(re)还有要匹配的字符串(str),加深理解

    匹配分组

|匹配左右任意一个表达式
()将括号中的字符作为一个分组,(ab)
\num引用分组(上面)的内容,num从1开始,表示第一个分组
(?P<name>)为分组起别名
(?P=name)引用别名为name的分组
import re


# 验证邮箱是否符合要求,要求:@之前有4-12位,可以位163、qq、outlook邮箱
ret = re.match(r"\d{4,12}@(163|qq|outlook).com", "123456789@163.com")
print(ret.group())

# 直接通过 \num 调用分组或为分组起别名调用例子
html_str = "<body><h1>hahahhaha</h1></body>"

ret_1 = re.match(r"<(\w+)><(\w+)>.*</\2></\1>", html_str)
ret_2 = re.match(r"<(?P=<body>)><(?P=<h1>)>.*</(?P=h1)></(?P=body)", html_str)
print(ret_1.group())
print(ret_2.group())

abcd|efg:| 左边的表达式为abcd,右边表达式为efg,该式表示abcd或efg

ab(cd|efg):| 左边的表达式为cd,右边的表达式为efg,该式表示abcd或abefg

当调用分组时分组较少最好不好写别名,麻烦

三、Python中正则表达式的其他函数调用

re.search(r"re", "str")

使用正则表达式匹配字符串,用 .group()从返回值中提取字符串

search()函数不会从str开头开始匹配,只要匹配到符合要求的数据就返回

re.findall(r"re", "str")返回一个列表,列表里为所有符合要求的数据
re.sub(r"re", "replace", "str")将匹配到的数据进行替换,返回值为字符串
re.split(r"re", "str")根据匹配将字符串进行切割,并返回一个列表
import re

def add(temp):
    strAge = temp.group()
    age = int(strAge) + 1
    return str(num)

ret_1 = re.search(r"\d+", "这个人100岁")
print(ret_1.group())

ret_2 = re.findall(r"\d+", "这个人100岁, 他的儿子50岁")
print(ret_2)

ret_3 = re.sub(r"\d+", "3", "这个人100岁, 他的儿子50岁")  # 这样子更改的话结果为字符串
print(ret_3)

ret_3 = re.sub(r"\d+", add, "这个人100岁, 他的儿子50岁")  # 传到函数里面的并非是字符串
print(ret_3)

ret_4 = re.split(r":| ", "qq.email|123 456 789")
print(ret_4)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值