Python中的re模块之正则表达式模块常用方法
作者:常家壮
re模块介绍:
Python的re模块提供了正则表达式的功能,可以用来进行高级的字符串匹配和处理。re模块的主要功能包括:
- 编译正则表达式 - 使用re.compile()可以编译正则表达式字符串,生成正则表达式对象。
- 匹配字符串 - 使用正则表达式对象的match()、search()、findall()等方法可以在字符串进行匹配。
- 替换字符串 - 使用sub()和subn()方法可以使用正则表达式进行字符串替换。
- 分割字符串 - 使用split()方法可以按照正则表达式的匹配结果分割字符串。
- 获取匹配信息 - match对象包含了各种匹配信息,如匹配字符串、位置等。
- 标志 - 可以使用标志来修改正则表达式的匹配方式,如忽略大小写,多行匹配等。
- 模块级函数 - re模块还提供了模块级的正则匹配函数,如escape()可以对字符串转义。
re模块的这些功能覆盖了正则表达式的常见用法。使用re模块可以简化字符串的模式匹配、信息提取、过滤替换、切分等操作
需要注意的一点是,re模块主要针对ASCII字符,对Unicode的支持不太友好。此时可以考虑第三方模块如regex
总之,re模块是Python中使用正则表达式的最基础的模块,非常值得学习和掌握
Python re模块详解
re模块提供正则表达式模式匹配操作,主要有以下函数:
match()
匹配字符串开头位置,返回match对象或None:
import re m = re.match('foo','foo') print(m.group()) # 'foo' m = re.match('foo','bar') print(m) # None
search()
搜索字符串任意位置,返回match对象或None:
m = re.search('foo','hello food') print(m.group()) # 'foo'
findall()
搜索字符串,返回所有匹配的列表:
m = re.findall('\d','123abc456') print(m) # ['1', '2', '3', '4', '5', '6']
sub()
使用正则表达式进行字符串替换:
text = re.sub('\d', '0', '123abc456') print(text) # '000abc000'
split()
使用正则表达式进行字符串分割:
m = re.split('\d+', '123abc456') print(m) # ['abc', '']
compile()
编译正则表达式,返回pattern对象:
pat = re.compile('\d') m = pat.match('123')
finditer()
在Python的re模块中,re.finditer()
是非常有用的一个正则表达式匹配函数。
re.finditer()
的作用是在字符串中找到所有的匹配,并返回一个迭代器。相比re.findall()
和re.finditer()
有以下区别:
re.findall()
:返回一个匹配字符串的列表re.finditer()
:返回一个匹配对象迭代器
示例:
import re s = 'hello 123 456 world' matches = re.findall('\d+', s) print(matches) # ['123', '456'] iterator = re.finditer('\d+', s) print(iterator) # <callable_iterator object at 0x10f5f3b50> for match in iterator: print(match) # <re.Match object; span=(6, 9), match='123'> # <re.Match object; span=(10, 13), match='456'>
re.finditer()
的返回对象是一个迭代器,每次迭代返回一个Match对象,包含匹配的字符串和位置。
主要优点是:
- 不需要先存储所有匹配,更save内存
- 可以逐个访问每个匹配
- 提供了匹配的位置信息
所以在需要定位每个匹配的位置时,re.finditer()
非常有用。
fullmatch()
匹配整个字符串,返回match对象或None:
import re m = re.fullmatch('foo','foo') print(m.group()) # 'foo' m = re.fullmatch('foo','foo bar') print(m) # None
escape()
将特殊字符转义,可以将字符串转化为正则表达式的字符串形式:
escaped = re.escape('http://example.com') print(escaped) # 'http:\/\/example\.com'
purge()
清除缓存的正则表达式,可以避免重复编译正则表达式:
pat = re.compile(r'\d+') re.purge() # 清除缓存
match.expand()
使用匹配到的组内容,替换字符串模板:
m = re.match(r'(?P<name>\w+) (\w+)', 'John Doe') print(m.expand('Hello \g<name>')) # 'Hello John'
(?P\w+)和 group(“name”) 搭配使用
import re pattern = r'(?P<first_name>\w+) (?P<last_name>\w+)' string = 'John Doe' # 匹配字符串 m = re.match(pattern, string) # 使用命名组获取匹配 first_name = m.group('first_name') last_name = m.group('last_name') print(first_name) # John print(last_name) # Doe # 替换字符串 new_string = re.sub(pattern, r'\g<last_name>, \g<first_name>', string) print(new_string) # Doe, John
在这个例子中,正则表达式模式使用了两个命名捕获组first_name和last_name。
然后在获取匹配后,可以直接通过命名引用匹配的内容。
在替换字符串时,也可以利用命名组引用,使代码更简洁清晰。
所以命名捕获组可以让正则匹配和处理更高效方便。
以上是re模块的常用函数
到此这篇关于Python-re模块-正则表达式模块常用方法的文章就介绍到这了,更多相关Python正则表达式模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!