python进阶之正则表达式

一、什么是正则表达式?

顾名思义,正则表达式是一个表达式,这个表达式可以表示符合一定的规则字符串。

是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

通过它的语法,你可以十分方便的查找到符合一定规律的字符串。

正则表达式在许多语言都可以使用,语法都是相同的。但需要导的包或模块可能不同。

本文以python演示,在python中,提供了re模块让我们能使用正则表达式。re模块内也提供了许多方法,可简便我们的操作。

二、正则表达式的用途。

  1. 用于各种数据的校验:
    如 密码强度校验、手机号,用户名格式校验、电子邮件地址校验、身份证号校验等等。

  2. 用于查找有特定规律的数据:
    如:在规模庞大的数据中查找电话号码,银行卡号,车牌号,用户名等。

  3. 用于替换有特定规律的数据:
    如: 将数据中所有的电话号都替换为*号等。

既然正则表达式可以查找匹配符合一定特征的数据,那自然可以对这些数据进行增删改查

三、正则表达式的语法。

常见语法:

. 匹配所有的字符。
. 表示要匹配除了换行符之外的任何单个字符。

代码示例:

import re

content = "绿色是生机的颜色,我不喜欢红色,但我喜欢蓝色"

x = re.compile(r'.色')  # 匹配 某个字符 加上  色

for i in x.findall(content):
    print(i)
'''结果:
绿色
颜色
红色
蓝色
'''

*号表示匹配前面的子表达式任意次,包括0次。

import re

content = "绿色是生机的颜色,我不喜欢红色,但我喜欢蓝色"

x = re.compile(r',.*')  # 匹配 ,加上任意字符匹配0--任意次。

for i in x.findall(content):
    print(i)
'''结果:
,我不喜欢红色,但我喜欢蓝色
'''

+ 表示匹配前面的子表达式一次或多次,不包括0次。

? 表示匹配前面的子表达式0次或1次。

花括号{ }表示 前面的字符匹配 指定的次数 。

注意 :‘ * ’, ‘+’, ‘?’ 都是贪婪地,使用他们时,会尽可能多的匹配内容。
使用非贪婪模式,需要在‘*’, ‘+’, ‘?’ 后面加上 ?

对元字符的转义:
反斜杠 \ 加上特殊字符。
如: 反斜杠 \加上* 代表 星号*。

反斜杠后面接一些字符,表示匹配 某种类型 的一个字符。

如:

\d 匹配0-9之间任意一个数字字符,等价于表达式 [0-9]

\D 匹配任意一个不是0-9之间的数字字符,等价于表达式 [^0-9]

\s 匹配任意一个空白字符,包括 空格、tab、换行符等,等价于表达式 [\t\n\r\f\v]

\S 匹配任意一个非空白字符,等价于表达式 [^ \t\n\r\f\v]

\w 匹配任意一个文字字符,包括大小写字母、数字、下划线,等价于表达式 [a-zA-Z0-9_]

缺省情况也包括 Unicode文字字符,如果指定 ASCII 码标记,则只包括ASCII字母

\W 匹配任意一个非文字字符,等价于表达式 [^a-zA-Z0-9_]

反斜杠也可以用在方括号里面,比如 [\s,.] 表示匹配 : 任何空白字符, 或者逗号,或者点

方括号表示要匹配 指定的几个字符之一 :

比如

[abc] 可以匹配 a, b, 或者 c 里面的任意一个字符。等价于 [a-c] 。

[a-c] 中间的 - 表示一个范围从a 到 c。

如果你想匹配所有的小写字母,可以使用 [a-z]

一些 元字符 在 方括号内 失去了魔法, 变得和普通字符一样了。

比如

[akm.] 匹配 a k m . 里面任意一个字符

这里 . 在括号里面不在表示 匹配任意字符了,而就是表示匹配 . 这个 字符

如果在方括号中使用 ^ , 表示 非 方括号里面的字符集合。

起始、结尾位置 和 单行、多行模式

^ 表示匹配文本的 开头 位置。

正则表达式可以设定 单行模式 和 多行模式

如果是 单行模式 ,表示匹配 整个文本 的开头位置。

如果是 多行模式 ,表示匹配 文本每行 的开头位置。

$ 表示匹配文本的 结尾 位置。

如果是 单行模式 ,表示匹配 整个文本 的结尾位置。

如果是 多行模式 ,表示匹配 文本每行 的结尾位置。

竖线 | 表示 匹配 其中之一 。

括号()称之为 正则表达式的 组选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值