Python常用模块——正则表达式re模块

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模块及其常用函数、匹配符和修饰符。通过正则表达式的灵活应用,可以轻松处理字符串中的复杂问题,提高代码的可读性和效率。

后端开发标签