Python的re模块及其常用函数用法详解
Python的re模块是一个支持正则表达式的库,它提供了一系列的函数来实现对字符串的正则表达式匹配、查找和替换操作。re模块的函数使用起来非常简单,但是由于正则表达式语言非常强大和复杂,有很多细节和技巧需要注意。
1. re.match(pattern, string, flags=0)
re.match函数从字符串的起始位置开始匹配正则表达式,如果匹配成功,则返回匹配对象,否则返回None。其中,pattern是正则表达式字符串,string是要匹配的字符串,flags是标志位,用于控制匹配的方式。
示例:
import re
match = re.match('Hello', 'Hello, world!')
if match:
print('Matched')
else:
print('Not matched')
输出:
Matched
如果正则表达式中包含元字符,则需要使用转义字符来转义,例如:
import re
match = re.match('\d+', '123abc')
if match:
print('Matched')
else:
print('Not matched')
输出:
Matched
2. re.search(pattern, string, flags=0)
re.search函数用于在字符串中搜索正则表达式的 个匹配项,如果找到则返回一个匹配对象,否则返回None。和re.match不同的是,re.search从整个字符串开始匹配,只要找到 个匹配项就立即返回。
示例:
import re
match = re.search('world', 'Hello, world!')
if match:
print('Matched')
else:
print('Not matched')
输出:
Matched
3. re.findall(pattern, string, flags=0)
re.findall函数用于查找字符串中所有匹配正则表达式的子串,并返回一个由所有匹配项组成的列表。如果匹配失败,则返回一个空列表。
示例:
import re
result = re.findall('\d+', '123abc456def')
print(result)
输出:
['123', '456']
4. re.sub(pattern, repl, string, count=0, flags=0)
re.sub函数用于在字符串中查找所有匹配正则表达式的子串,并将它们替换为新的字符串。其中,pattern是正则表达式字符串,repl是替换字符串,string是要查找和替换的原字符串,count表示替换的最大次数。
示例:
import re
result = re.sub('[abc]', 'X', 'abc123def')
print(result)
输出:
XXX123def
5. re.split(pattern, string, maxsplit=0, flags=0)
re.split函数用于根据正则表达式指定的模式来分割字符串,并返回一个由分割后生成的子串组成的列表。其中,maxsplit表示最大分割次数。
示例:
import re
result = re.split('\W+', 'Hello,world!How-are+you?')
print(result)
输出:
['Hello', 'world', 'How', 'are', 'you', '']
6. 正则表达式语法
正则表达式语法非常强大和复杂,可以用来描述各种字符串模式,包括数字、字母、空格、标点符号、特殊符号等。以下是常用的正则表达式语法:
- 字符类:用[ ]表示,表示一个字符集合,其中可以包含多个字符、字符区间和反义字符集合。
- [abc]:表示匹配a、b、c中的任意一个字符
- [a-z]:表示匹配a到z区间内的任意一个字符
- [^abc]:表示匹配除a、b、c以外的任意一个字符
- 控制字符:用\表示,包括与字符类和重复标记相关的转义字符
- \d:匹配任意一个数字字符,等价于[0-9]
- \D:匹配任意一个非数字字符,等价于[^0-9]
- \w:匹配任意一个字母、数字或下划线字符,等价于[A-Za-z0-9_]
- \W:匹配任意一个非字母、数字或下划线字符,等价于[^A-Za-z0-9_]
- \s:匹配任意一个空白字符,包括空格、制表符和换行符
- \S:匹配任意一个非空白字符
- 重复标记:用+、*、?、{m,n}表示,用于指定字符或字符集的重复次数。
- +:匹配前一个字符或字符集至少1次
- *:匹配前一个字符或字符集任意多次,可以是0次
- ?:匹配前一个字符或字符集0次或1次
- {m,n}:匹配前一个字符或字符集至少m次,最多n次
- 单词边界:用\b表示,匹配单词的开始或结束位置。
- \babc:匹配以abc开头的单词
- abc\b:匹配以abc结尾的单词
- 分组:用( )表示,将一个或多个字符或字符集合并成一个组。
- (abc):将abc合并成一个组
- \1、\2等:在re.sub函数中可以使用\1、\2等来表示分组后的子串
- 或操作:用|表示,匹配多个模式中任意一个。
- abc|def:匹配abc或def
总之,Python的re模块提供了丰富的函数和语法来实现对字符串的正则表达式处理,可以帮助我们快速、高效地处理各种文本数据。但是,在使用正则表达式处理数据时,一定要注意细节和正确性,避免产生不必要的错误和问题。
