正则表达式(Regular Expression)是用于文本匹配的强大工具,常用于模式搜索、替换及解析文本。Python 的 re
模块为开发者提供了便利的接口,以完成丰富多样的文本操作任务。
Python 的 re
模块包含了全面的正则表达式功能,包括模式编译、匹配搜索、替换及分组等操作。通过 re
模块,开发者能够灵活运用正则表达式进行字符串处理。
re.compile()
函数将字符串转换为正则表达式对象,以便重复使用。re.match()
从字符串的开头匹配,re.search()
在整个字符串中搜索匹配,re.fullmatch()
确保整个字符串完全匹配。re.findall()
返回所有匹配项,re.finditer()
返回匹配项迭代器,re.sub()
替换匹配的文本,re.subn()
除替换外还返回替换后的字符串长度。[a-z]
匹配所有小写字母,[0-9]
匹配所有数字等。re
模块支持多种修饰符与标志,如 re.I
忽略大小写匹配,re.M
多行模式匹配,re.S
将点 .
匹配包括换行符在内的任何字符,这些特性能显著扩展正则表达式的灵活性与适用性。
利用正则表达式识别 Python 中的关键字、特殊字符与符号,适用于代码分析与文本解析场景。
import re pattern = 'www' print(re.match(pattern, 'www.runoob.com').span())
import re line = "Cats are smarter than dogs" searchObj = re.search(r'(.*) are (.*?) .*', line, re.M|re.I) if searchObj: print("搜索整个字符串:", searchObj.group()) print("匹配的组1:", searchObj.group(1)) print("匹配的组2:", searchObj.group(2)) else: print("无匹配结果")
import re line = "Cats are smarter than dogs" matchObj = re.fullmatch(r'[A-Z][a-z]* [a-z]+', line) if matchObj: print("完整匹配字符串:", matchObj.group()) else: print("不匹配")
import re phone = "2004-959-559 # 这是一个国外电话号码" num = re.findall(r'#.*$', phone) print("电话号码是: ", num)
import re line = "Cats are smarter than dogs" it = re.finditer(r"\d+", line) for match in it: print(match.group())
import re s = 'A23G4HFD567' print(re.sub(r'#.*$', "", s)) print(re.sub(r'\D', "", s))
import re def double(matched): value = int(matched.group('value')) return str(value * 2) s = 'A23G4HFD567' print(re.sub('(?P<value>\d+)', double, s))
import re sp1 = re.split('\d+', 'I5am5Superman', maxsplit=0) print(sp1)
通过正则表达式解析 HTML 代码,提取特定内容如标题、链接等。
清洗数据时,去除不需要的字符、格式化文本以满足特定需求。
验证用户输入的密码是否符合特定规则,如长度、字符类型等。
解析文件路径,提取文件名和扩展名,便于后续处理或操作。
通过使用括号来定义子组,实现细化的匹配和文本提取。
采用非贪婪匹配策略以更精确地控制匹配结果。
使用量词如 *
、+
、?
来定义重复模式,提高匹配的灵活性。
import re html = ''' <li>排行:<span>(.*?)</span></li> <img class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="(.*?)" alt="(.*?)" /> <a title="(.*?)" href="(.*?)" class="songlist__artist">(.*)</a> <div class="songlist__time">(.*?):</div> ''' pattern = re.compile(html, re.S) data = pattern.findall(html) for d in data: print('排名:', d[0], '链接:', d[1], '歌名:', d[2], '歌手:', d[3], '歌曲链接:', d[4], '时间:', d[5])
根据具体HTML内容,输出会显示提取的排名、链接、歌名、歌手、歌曲链接和时间等信息。
这段代码利用正则表达式解析HTML,匹配关键元素并提取所需信息。通过理解模式匹配与分组,实现有效数据提取,适用于网页内容分析与数据抓取场景。