1. re模块介绍
re模块是Python中用于处理正则表达式的模块,它提供了对正则表达式的支持,能够帮助我们更方便、更快捷地处理字符串。正则表达式是一种以某种模式来表示字符串规律的方法,它可以用来判断一个字符串是否符合某种规律,或者从一个字符串中提取信息。
Python中的re模块提供了正则表达式相关的基本操作,如字符匹配、子字符串查找、替换、分割等功能。使用re模块可以更加高效地完成字符串操作。
2. re模块的常用函数
2.1 re.match()函数
re.match()函数用于从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()函数就会返回None。它的语法格式如下:
import re
res = re.match(pattern, string, flags=0)
其中,pattern是正则表达式,string是要匹配的字符串,flags是匹配模式,可选参数。
例如,匹配字符串中的"hello":
import re
str = "hello python"
matchObj = re.match(r'hello', str)
if matchObj:
print("matchObj.group() : ", matchObj.group())
else:
print("No match!!")
在上面的例子中,通过re.match()函数匹配了字符串的起始位置,匹配中包含了字符串中的"hello"子串,即匹配成功。
2.2 re.search()函数
re.search()函数用于在整个字符串中搜索第一个匹配的子串。它的语法格式如下:
import re
res = re.search(pattern, string, flags=0)
其中,pattern是正则表达式,string是要匹配的字符串,flags是匹配模式,可选参数。
例如,匹配字符串中的"hello":
import re
str = "python hello world"
searchObj = re.search(r'hello', str)
if searchObj:
print("searchObj.group() : ", searchObj.group())
else:
print("No match!!")
在上面的例子中,通过re.search()函数在整个字符串中匹配了第一个"hello"子串,即匹配成功。
2.3 re.findall()函数
re.findall()函数用于在字符串中查找所有匹配的子串,并返回一个列表。它的语法格式如下:
import re
res = re.findall(pattern, string, flags=0)
其中,pattern是正则表达式,string是要匹配的字符串,flags是匹配模式,可选参数。
例如,查找字符串中的所有数字:
import re
str = "one1 two2 three3"
res = re.findall(r'\d+', str)
print(res)
在上面的例子中,通过re.findall()函数查找了字符串中的所有数字"1"、"2"、"3",并以列表的形式返回。
2.4 re.sub()函数
re.sub()函数用于替换字符串中的匹配项,用指定的字符串替换原字符串的匹配项,并返回替换后的字符串。它的语法格式如下:
import re
res = re.sub(pattern, repl, string, count=0, flags=0)
其中,pattern是正则表达式,repl是要替换的字符串,string是要匹配的字符串,count是替换次数,可选参数,flags是匹配模式,可选参数。
例如,将字符串中的所有空格替换为"-":
import re
str = "this is a test"
res = re.sub(r'\s', "-", str)
print(res)
在上面的例子中,通过re.sub()函数将原字符串中的所有空格替换为"-",并返回新的字符串。
3. re模块的常用匹配符
3.1 ^匹配字符串的开头
在使用正则表达式时,"^"符号表示匹配字符串的开头,例如,"^hello"表示匹配以"hello"开头的字符串。
import re
str = "hello world"
matchObj = re.match(r'^hello', str)
if matchObj:
print("matchObj.group() : ", matchObj.group())
else:
print("No match!!")
上面的例子中,通过"^hello"匹配了字符串"hello world"的开头,所以匹配成功。
3.2 $匹配字符串的结尾
"$"符号表示匹配字符串的结尾,例如,"world$"表示匹配以"world"结尾的字符串。
import re
str = "hello world"
matchObj = re.match(r'world$', str)
if matchObj:
print("matchObj.group() : ", matchObj.group())
else:
print("No match!!")
上面的例子中,通过"world$"匹配了字符串"hello world"的结尾,所以匹配失败。
3.3 \d匹配数字
"\d"匹配数字,例如,"\d+"表示匹配一个或多个数字,"\d{3}"表示匹配三个数字。
import re
str = "one1 two22 three333"
res1 = re.findall(r'\d+', str)
res2 = re.findall(r'\d{3}', str)
print(res1)
print(res2)
在上面的例子中,通过"\d+"匹配了字符串中的1、22、333,通过"\d{3}"匹配了字符串中的333。
3.4 \w匹配字母数字及下划线
"\w"匹配字母数字及下划线,例如,"\w+"表示匹配一个或多个字母、数字或下划线。
import re
str = "hello world_2021"
res = re.findall(r'\w+', str)
print(res)
在上面的例子中,通过"\w+"匹配了字符串中的"hello"、"world"和"2021"。
3.5 .匹配任意字符
"."匹配任意字符(除了换行符和行结束符),例如,"a.b"可以匹配"acb"、"a1b"、"a#b"等任何以"a"开头,"b"结尾,中间包含一个任意字符的字符串。
import re
str = "a1b a#b acb"
res = re.findall(r'a.b', str)
print(res)
在上面的例子中,通过"a.b"匹配了字符串中的"a1b"、"a#b"和"acb"。
3.6 []匹配其中任意一个字符
"[]"用于匹配其中任意一个字符,例如,"[abc]"可以匹配"a"、"b"或者"c"。
import re
str = "abc def ghi"
res = re.findall(r'[abc]', str)
print(res)
在上面的例子中,通过"[abc]"匹配了字符串中的"a"、"b"和"c"。
4. re模块的常用修饰符
4.1 re.I,忽略大小写
re.I修饰符用于忽略大小写,例如,"ABc"和"abc"会被认为是匹配的。
import re
str = "ABc"
res = re.findall(r'abc', str, re.I)
print(res)
在上面的例子中,通过"abc"和re.I修饰符匹配成功了字符串"ABc"。
4.2 re.S,匹配任意字符
re.S修饰符用于匹配任意字符,包括换行符和行结束符。
import re
str = "hello\nworld"
res = re.findall(r'.+', str, re.S)
print(res)
在上面的例子中,通过".+"和re.S修饰符匹配成功了字符串"hello\nworld"。
4.3 re.M,多行匹配
re.M修饰符用于多行匹配模式,例如,"^hello"和re.M修饰符可以匹配每一行以"hello"开头的字符串。
import re
str = "hello world\nhello python"
res = re.findall(r'^hello', str, re.M)
print(res)
在上面的例子中,通过"^hello"和re.M修饰符匹配成功了字符串中的两行以"hello"开头的字符串。
5. 总结
本文介绍了Python中的正则表达式re模块及其常用函数、匹配符和修饰符。通过正则表达式的灵活应用,可以轻松处理字符串中的复杂问题,提高代码的可读性和效率。