专业建站公司设计,百度收录关键词,网站怎么做seo关键词,开发公司属于什么行业Python中的正则表达式是一种强大的工具#xff0c;用于在文本中搜索、匹配和处理特定模式的字符串。它们通过定义一种模式#xff0c;使得可以轻松地搜索、替换、提取和验证文本数据#xff0c;在Python中的正则表达式由re模块提供支持的。
正则表达式通常用于以下任务用于在文本中搜索、匹配和处理特定模式的字符串。它们通过定义一种模式使得可以轻松地搜索、替换、提取和验证文本数据在Python中的正则表达式由re模块提供支持的。
正则表达式通常用于以下任务
1.搜索与模式匹配的文本你可以使用正则表达式来查找文本中是否包含特定模式的字符串例如查找所有电子邮件地址或电话号码。
2.替换文本正则表达式可以用于替换文本中的特定模式。例如你可以将所有匹配的单词替换为另一个单词。
3.提取信息你可以使用正则表达式从文本中提取特定模式的信息。例如从文本中提取所有日期或数字。
4.验证输入正则表达式可以用于验证输入是否符合特定的模式。例如验证用户输入的电子邮件地址是否具有正确的格式。
1.匹配字符串
Python 中的re模块是一个用于字符串中正则表达式操作的标准库以下代码演示了如何使用 re.match() 函数来查找字符串中与给定模式匹配的部分。
代码示例
# match()函数的使用# \w匹配字母数字及下划线
# \s匹配任意空白字符等价于 [\t\n\r\f].
# \d匹配任意数字等价于 [0-9]
# [...]用来表示一组字符,单独列出[amk] 匹配 am或k
# [^...]不在[]中的字符[^abc] 匹配除了a,b,c之外的字符。
# ^匹配字符串的开头
# {n}精确匹配n个前面表达式。
import re
contentHello 123 4567 World_This is a Regex Demo
print(len(content)) # 41# 使用re.compile()函数创建一个正则表达式模式对象pattern模式是 r^Hello\s\d\d\d\s\d{4}\s\w{10}。该模式用来匹配以Hello开头后面跟着一个空白字符然后是三个数字再一个空白字符接着是四个数字再是一个空白字符最后是十个字母数字或下划线的字符串
patternre.compile(r^Hello\s\d\d\d\s\d{4}\s\w{10})
# 调用re.match(pattern, content)对content进行匹配返回结果保存在result中
resultre.match(pattern,content)print(result) # 打印匹配结果结果是一个匹配对象
print(result.group()) # 打印匹配对象中与模式匹配的字符串
print(result.span()) # 打印匹配的位置即匹配的字符串在原始字符串中的起始位置和结束位置运行结果 2.正则表达式匹配目标
#匹配目标#group()会输出完整的匹配结果而group(1)会输出第一个被()包围的匹配结果
import re
contentHello 1234567 World_This is a Regex Demo # 被匹配的文本字符串
patternre.compile(r^Hello\s(\d{7})\s(\w{5})) # 编译后的正则表达式对象其含义是# ^Hello匹配以 Hello 开头的字符串# \s匹配一个空白字符例如空格# (\d{7})匹配七位数字并将这七位数字作为一个分组。# \s再次匹配一个空白字符# (\w{5})匹配五个字母数字或下划线字符并将这五个字符作为一个分组
result re.match(pattern,content) # 执行匹配
print(result)
print(result.group())
print(result.group(1))
print(result.group(2))
print(result.span())运行结果 3.正则表达式中的贪婪匹配与非贪婪匹配
在正则表达式中贪婪匹配和非贪婪匹配是两种常见的匹配策略它们决定了正则表达式如何从字符串中匹配字符。**贪婪匹配Greedy matching**是正则表达式的默认行为。在贪婪匹配模式下正则表达式会尽可能多地匹配字符直到无法继续匹配为止。即使这种匹配超过了必要的最小匹配它也会继续尝试匹配更多的字符。非贪婪匹配Non-greedy matching又称最小匹配或懒惰匹配是通过在量词如*, , ?, {n,}后面加上一个?来启用的。在非贪婪模式下正则表达式会尽可能少地匹配字符。
1.贪婪匹配
代码示例
#贪婪匹配与非贪婪匹配# 01贪婪匹配
import re
contentHello 1234567 World_This is a Regex Demo
# 编译一个正则表达式模式pattern模式是 r^He.*(\d).*Demo$
# ^He表示字符串以 He 开头。
# .*表示匹配任意个包括0个任意字符. 表示任意字符* 表示任意次数这是一个贪婪模式会尽可能多地匹配字符
# (\d)括号表示一个分组\d 表示匹配一个或多个数字。由于前面的 .* 是贪婪的所以这个表达式会尽可能少地匹配数字只要能满足整个表达式的匹配
# .*Demo$再次使用 .* 进行贪婪匹配Demo$ 表示字符串以 Demo 结尾
patternre.compile(r^He.*(\d).*Demo$)
resultre.match(pattern,content)
print(result) # 查看匹配结果若匹配成功则result是一个匹配对象若失败则为 None
print(result.group()) # 获取整个匹配的字符串应输出Hello 1234567 World_This is a Regex Demo
print(result.group(1)) # 获取第一个分组的内容即 \d 匹配的部分。因为 .* 的贪婪性它尽可能地匹配了除最后一个数字以外的所有内容所以group(1)应该只包含 7运行结果 2.非贪婪匹配
代码示例
#02 非贪婪匹配
import re
contentHello 1234567 World_This is a Regex Demo
# He匹配文本中的Hello的开头的He
# .*?这是一个非贪婪的匹配匹配尽可能少的任意字符直到遇到下一个符合模式的字符。因为它后面跟着\d所以它会停在数字开始的地方
# (\d)这是一个捕获组用于匹配一个或多个数字\d并将这些数字作为一个分组保存以便后面可以单独访问。
# .*匹配从数字之后到字符串末尾前的任意字符
# Demo$匹配字符串末尾的Demo$表示字符串的结束。
patternre.compile(rHe.*?(\d).*Demo$)
resultre.match(pattern,content)
print(result)
print(result.group())
print(result.group(1)) # group(1)返回第一个捕获组的内容在这个例子中是字符串中的第一串数字1234567。运行结果 3.注意
需要注意的是如果匹配的结果在字符串结尾.*?就有可能匹配不到任何内容因为它会匹配尽可能少的字符例如
import re
contenthttps://www.baidu.com/search/error.html
result1re.match(r^https.*search/(.*),content) # 贪婪匹配模式
result2re.match(rhttps.*search/(.*?),content) # 非贪婪匹配模式
print(result1: , result1.group(1))
print(result2: ,result2.group(1))运行结果 4.正则表达式中的修饰符
正则表达式可以包含一些可选标志修饰符来控制匹配的模式而修饰符被指定为一个可选的标志。以下代码演示了如何使用正则表达式的修饰符来控制匹配的模式特别是re.S修饰符的用法。
#修饰符import re
content Hello 1234567 World_This
is a Regex Demo# r^He.*?(\d).*?Demo$这是正则表达式模式
# ^He^表示匹配必须从字符串的开始处开始He则匹配字符串开始的Hello中的He
# .*?非贪婪模式匹配任意字符尽可能少的匹配直到下一个符合条件的字符
# (\d)捕获组匹配一个或多个数字
# .*?再次使用非贪婪模式匹配任意字符直到遇到最后的Demo
# Demo$匹配字符串的末尾必须以Demo结束
# re.S或re.DOTALL这个修饰符使.特殊字符能够匹配任何字符包括换行符默认情况下.不匹配换行符
patternre.compile(r^He.*?(\d).*?Demo$,re.S)
resultre.match(pattern,content)
print(result.group(1)) # 打印第一个捕获组的内容即字符串中的数字1234567# 由于使用了re.S修饰符正则表达式可以跨越多行来找到匹配项。如果没有这个修饰符.字符就不能匹配换行符导致匹配失败。在这个例子中使用re.S允许.*?匹配包括换行符在内的任意字符从而正确地匹配并捕获所需的数字运行结果 5.转义匹配
使用Python的正则表达式库来匹配具有特殊字符的字符串。
代码示例
# 转义匹配
import re
content(百度)www.baidu.com
# \(百度\)因为圆括号()在正则表达式中是特殊字符用于定义捕获组所以需要使用反斜杠\进行转义使其表示字面意义上的括号
# www\.baidu\.com同样的点.也是一个特殊字符它通常用来匹配除换行符之外的任何单个字符。在这里我们需要匹配字面上的点因此使用\.进行转义
patternre.compile(r\(百度\)www\.baidu\.com)
resultre.match(pattern,content)
print(result.group())运行结果 6 search()方法匹配字符串
# search()
import re
content Extra stings Hello 1234567 World_This is a Regex Demo Extra stingspatternre.compile(He.*?(\d).*Demo)
# 使用search方法在content字符串中搜索第一个符合pattern定义的模式的匹配。不同于match方法search不要求模式从字符串的开头开始匹配它会在整个字符串中搜索匹配
resultre.search(pattern,content)
print(result.group())
print(result.group(1))运行结果 7.使用正则表达式根据要求匹配歌手和歌曲
import re
# html这个字符串包含了HTML代码片段其中包括了一个包含音乐列表的 div 元素
html div idsongs-listh2 classtitle经典老歌/h2p classintroduction经典老歌列表/pul idlist classlist-groupli data-view2一路上有你/lili data-view7a href/2.mp3 singer任贤齐沧海一声笑/a/lili data-view4 classactivea href/3.mp3 singer齐秦往事随风/a/lili data-view6a href/4.mp3 singerbeyond光辉岁月/a/lili data-view5a href/5.mp3 singer陈慧琳记事本/a/lili data-view5a href/6.mp3 singer邓丽君i classfa fa-user/i但愿人长久/a/li/ul
/div# 正则表达式模式
# li.*? 匹配一个 li 标签及其可能的其他属性。
# active 匹配 class 属性中包含了 active 字符串的 li 元素。
# singer(.*?) 匹配 singer 属性值中的歌手名字。
# (.*?)/a 匹配了 a 标签中的文本内容也就是歌曲名字。
# html 是待匹配的字符串。
# re.S 是一个标志指定了在匹配中应该将换行符也视为普通字符。
resultre.search(li.*?active.*?singer(.*?)(.*?)/a,html,re.S)if result:print(result.group(1), result.group(2))运行结果 8.正则表达式中的sub()方法
使用Python中re模块的 sub()方法用于替换字符串中与指定正则表达式模式匹配的部分。
代码示例
#sub()方法
import re
content 54aK54yr5oiR54ix5L2g
# 这行代码使用了re模块的sub()方法来替换字符串content中匹配正则表达式模式\d的部分为空字符串
# \d 是一个正则表达式模式匹配一个或多个数字字符。
# 是要替换匹配部分的内容这里是空字符串表示删除匹配到的数字
# content是待处理的字符串。
resultre.sub(\d,,content)
print(result)运行结果 9.正则表达式处理日志内容
# 定义一个字符串变量log其中包含一个日志条目记录了日期、时间、日志级别和消息内容
log2017-06-06 15:06:16,148 - root - DEBUG - logger debug message
print(log.split(-)) # -是指定的分隔符split()方法将根据这个分隔符来拆分字符串。将日志条目中的每个部分分隔开并以列表的形式打印出来。运行结果 10.正则表达式中的findall()函数
# findall() 函数用于在给定的字符串中查找所有与指定正则表达式模式匹配的部分。import re# 这行代码定义了一个字符串content其中包含了一个HTML锚点链接。HTML锚点链接是一种在网页中创建超链接的方式它允许用户点击链接跳转到同一页面的不同位置。这些位置通常是页面上的特定部分例如标题、段落或者其他元素。
contenta hrefhttp://www.baidu.combaidu/a
# 使用 re.compile()函数创建一个正则表达式对象 pattern该对象用于匹配HTML锚点链接的a标签
# a href(.*?)(.*?)/a是一个正则表达式模式它匹配了一个a标签其中包含了href属性和链接文本
# (.*?) 是非贪婪匹配用于捕获 href 属性值和链接文本
patternre.compile(a href(.*?)(.*?)/a)
# findall函数在给定的字符串content中查找所有与正则表达式模式匹配的部分并返回一个包含所有匹配项的列表
resultre.findall(pattern,content)
print(result)
print(result[0]) # 打印出了结果列表中的第一个匹配项
print(result[0][0]) # 打印出了第一个匹配项中的第一个捕获组即链接的href属性值。href属性是 HTMLa元素中的一个属性用于指定超链接的目标地址Hypertext REFerence运行结果 以上内容总结自网络整理不易如有帮助欢迎转发我们下次再见