在Python中,re模块是用于处理正则表达式的模块。使用re模块,可以通过正则表达式来匹配、查找、替换字符串。
下面是一些re模块常用的方法:
re.match(pattern, string):从字符串的开始位置匹配一个模式,如果匹配成功,则返回一个匹配对象,否则返回None。
result = re.match(r"abc", "abcabcd")
print(result)
输出:
<re.Match object; span=(0, 3), match='abc'>
re.search(pattern, string):在字符串中搜索匹配模式的第一个位置,如果匹配成功,则返回一个匹配对象,否则返回None。
result = re.search(r"abc", "abcabcdabcde")
print(result)
输出:
<re.Match object; span=(0, 3), match='abc'>
re.findall(pattern, string):在字符串中搜索匹配模式的所有位置,并以列表形式返回所有匹配的字符串。
result = re.findall(r"\d{2,4}?", "123456789")
print(result)
输出:
['12', '34', '56', '78']
re.sub(pattern, repl, string):用指定的替换字符串将匹配模式的所有位置替换,然后返回替换后的字符串。
result = re.sub(r"a\dc", "醒醒啦", "a1ca2cda3cde", count=2)
print(result)
输出:
醒醒啦醒醒啦da3cde
此外,还有字符串中的关键词检索:
\W 非 数字 字母 下划线
\d 数字
\D 非数字
\s 空白
\S 非空白
. 任意字符 除了\n 除非使用re.S 可以匹配所有
^ 开头 re.M 可以匹配\n
$ 结尾 re.M 可以匹配\n
在检索后面可以加上*,+,?使用贪婪匹配:
* 代表有>=0 个
+ 代表有>=1 个
? 代表有 1 个 或者0个
如果不想使用贪婪匹配,那么需要加上非贪婪:
非贪婪: 尽可能匹配少个数
在贪婪模式后方追加一个?
{n} 匹配n次,{m,n} 匹配m-n次,{m,n}? 非贪婪匹配
result = re.findall(r"\d{2,4}?", "123456789")
print(result)
输出:
['12', '34', '56', '78']
[] 匹配其中一个,| 或者,() 分组
result = re.findall(r"[1-9]|[a-z]", "123456789abcdxyzABCDXYZ")
print(result)
输出:
['1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'x', 'y', 'z']