1 Fork me on GitHub

python---内置库re

1.前言

这节学习可以操作正则表达式的内置库:re。
首先了解正则表达式的概念,之后在学re模块来操作正则表达式的这些方法。
re库是比较常用的内置库

2. 概念

在处理字符串的时候,经常我们会找一些复杂规则的一些字符串的需求。
正则表达式就是用来描述这些规则的工具,正则表达式就是记录文本规则的一些代码。
使用正则表达式可以用来查找符合某些复杂规则的一些字符串。

3.使用场景

工作当中一般在处理这种复杂的字符串的时候,会总到这个正则表达式。
比如:处理一些日志,对日志的特定内容过滤出来进行分析。

4.在python中使用正则表达式

在python中要使用正则表达式,需要把它当作模式字符串。
为了避免使用过多的转义符号,直接使用原生字符串来进行表示,原生字符串:即在字符串前面去加上r,加上之后就被当成普通的一个字符。

5. 使用re模块实现正则表达式操作

re是内置库,需要导入。

5.1正则表达式转换对象

首先看第一个方法:可以将字符串转换为正则表达式对象。
patter就是一个正则表达式,这个正则表达式传入到这个complete这个方法当中之后,最终会得到prog,这个prog就是我们的正则对象。

import re

# 匹配包含 hogwarts 的表达式
pattern = r"hogwarts"

# 转换为正则对象.(正则对象要经常用可以用这一步,不是可以省略这一步)
prog = re.compile(pattern)   # 通过re调用compile这个方法,然后再把定义的正则表达式再传进来。

 5.2 匹配字符串

匹配字符串可以用到3个方法:(如下图中)
这3个方法在传递参数是一样的,都需要把正则对象传进去,要匹配的字符串传进去,最后传一个flag。

 第一个方法:match()
import re
# 匹配以 hog 开头的字符串
pattern = r"hog\w+"

s1 = "Hogwarts is a magic school"
# match方法从字符串的开始出进行匹配,匹配成功会返回一个match对象。
# 第三个参数,利用re去调用I,这样就会不区分大小写
match1 = re.match(pattern,s1,re.I)
print(match1)
# 提取具体信息
print(f"匹配值的起始位置为:{match1.start()}")    # 调用一个start方法
print(f"匹配值的结束位置为:{match1.end()}")      # 调用一个end方法
print(f"匹配位置的元祖为:{match1.span()}")       # span方法,调用起始位置组成的元祖
print(f"要匹配的字符串为:{match1.string}")       # 调用string这个属性
print(f"匹配的数据为:{match1.group()}")         # 调用group这个方法


# 开头不是以hog开头,返回为None
s2 = "I like hogwarts"
match2 = re.match(pattern,s2,re.I)
print(match2)

返回:

第二个方法:search()

search方法在 整个字符串中去搜索 第一个匹配的值。
类似上面,现在可以搜索到值了。

import re
pattern = r"hog\w+"
s2 = "I like hogwarts"
match2 = re.search(pattern,s2,re.I)
print(match2)

返回:

第三个方法:findall()

它可以在字符串中搜索到 所有的能够符合我们的正则表达式的 字符串。

impor re
#  匹配以 hog 开头的字符串
pattern = r"hog\w+"

# 返回1个
s1 = "Hogwarts is a magic school"
match_list1 = re.findall(pattern,s1,re.I)
print(match_list1)

# 返回2个
s2 = "I like hogwarts hogwarts"
match_list2 = re.findall(pattern,s2,re.I)
print(match_list2)

返回:

5.3 匹配字符串

第一种:sub(),字符串替换

方法一:字符串替换
可以把匹配到的字符串替换成其他字符串。
替换需要用到sub这个方法。
代码示例:

import re
#  匹配手机号码
pattern = r"1[34578]\d{9}"

# 用sub方法进行替换
s1 = "中奖号码 123456 ,联系电话 15611111114"
result = re.sub(pattern,'1xxxxxxxx14',s1)
print(result)

返回:

第二种:spiit(),分割字符串

分割字符串,
这是实际工作中很实用的一个技能!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!__________________________

看下面栗子,分割url。

import re

p = r"[?|&]"     # 用?和 & 进行分割
url = "https://www.baidu.com/s?wd=%E9%9C%8D%E6%A0%BC%E6%B2%83%E5%85%B9&rsv_spt=1&rsv_iqid=0xa21846cc000b9d31&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=85070231_1_hao_pg&rsv_enter=0&rsv_dl=tb&rsv_sug3=16&rsv_sug1=5&rsv_sug7=100&rsv_btype=i&prefixsug=%25E9%259C%258D%25E6%25A0%25BC%25E6%25B2%2583%25E5%2585%25B9&rsp=1&inputT=10226&rsv_sug4=10956"
# 调用split方法,把参数穿进去
r = re.split(p,url)
print(r)   # 打印分割之后的结果

打印返回结果:

打印得到一组组参数。完成参数的拆分!!!!!!!!!!!!!!!!!!!!

posted @ 2022-07-04 18:55  v_jjling  阅读(189)  评论(0编辑  收藏  举报
AmazingCounters.com