正则表达式

通过Python内建的re模块,我们就可以在Python中利用正则表达式对字符串进行搜索、抽取和替换操作

方法

描述

match

匹配 要从字符串开头匹配,如果不匹配,则返回None

search

查找字符串,如果有符合条件的 子字符串 ,返回结果,返回字符串的位置

findall

匹配整个字符串,一直找到字符串结尾,返回结果,没有返回子字符串的位置

import re
msg = "刷卡积分的环境拉不拉几"
result1 = re.match("环境", msg)
result2 = re.search("环境", msg)
result3 = re.findall("环境", msg)
print(result1)    #None
print(result2)    #<re.Match object; span=(5, 7), match='环境'>
print(result3)    #['环境']

[]表示一个字符位

次数的匹配方法

最大匹配

最小匹配

描述

*

*?

重复匹配前表达式零次或多次 >=0。

+

+?

重复匹配前表达式一次或多次 >= 1。

?

??

重复匹配前表达式零次或一次。

*+?

定义正则验证次数

{m}

{m}?

精确重复匹配前表达式m次。

{m,}

{m,}?

至少重复匹配前表达式m次>= m

{m,n}

{m,n}?

至少重复匹配前表达式m次,至多重复匹配前表达式n次。

msg2 = "wjk0921vzska1f1rrr9e9ddd10sdfj"
result = re.search("[a-z][0-9][a-z]", msg2)
result2 = re.findall("[a-z][0-9][a-z]", msg2)
print(result)   #<re.Match object; span=(11, 14), match='a1f'>
print(result2)  #['a1f', 'r9e']

msg2 = "WJK9D21zVzska1F1rrr9e9dLd10sdfj"
result3 = re.findall("[a-zA-Z][0-9][a-zA-Z]", msg2)
print(result3)  #['K9D', 'a1F', 'r9e']

 开头和结尾的匹配

$

用于匹配字符串的末尾,(如果末尾有换行符 \n,就匹配\n前面的字符),即行尾

^

用于匹配字符串的开头,match 自动使用这种方法

.

用于匹配除换行符(\n)之外的所有字符w

qq = "12632189711"
result4 = re.match("[1-9][0-9]{4,10}$", qq)
print(result4)  #<re.Match object; span=(0, 11), match='12632189711'>

qq = "12632183339711"  #输入的位数超过规定的位数
result5 = re.match("[1-9][0-9]{4,10}$", qq)
print(result5)   #None

组合运算符

描述

[...]

匹配集合内的字符,如[a-z],[1-9]或[,./;']。

[^...]

匹配除集合外的所有字符,相当于取反操作。

A|B

匹配表达式A或B,相当于or操作。

(...)

表达式分组,每对括号为一组,如([a-b]+)([A-Z]+)([1-9]+)。

\number

匹配在number表达式组内的文本。

预定义字符

字符

描述

\A

表示从字符串的开始处匹配

\Z

表示从字符串的结束处匹配,如果存在换行,只匹配到换行前的结束字符串

\b

匹配一个单词边界,也就是指单词和空格间的位置。 例如"py\b"可以匹配"python"中的"py",但不能匹配"openpyxl"中的"py"

\B

匹配非单词边界。 "py\b" 可以匹配 "openpyxl" 中的"py",但是不能匹配"python 中的 py"

\d

匹配任意数字,等价于[0-9]

\D

匹配任意非数字字符,等价于[^\d] ^写在[]表示 非 大写表示非

\s

匹配任意空白字符,等价于[\t\n\r\f]

\S

匹配任意非空白字符,等价于[^\S]

\w

匹配任意字符、数字及下划线,等价于[^\w]

\W

匹配任意非字母数字字符。

\\

匹配任意的反斜杠 \

#筛选出后缀名为.py的文件
msg = "aa.py a*.py ab.txt bb.py cc.png dd**.py abyb.txt"
result6 = re.findall(r"[\w]+[*]*\.py\b", msg)
print(result6)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值