python 之 正则表达式模块re

文章目录

正则表达式(Regular Expression,简称为 regex 或 regexp)是用于在文本中匹配模式的特殊字符串表达式。Python 中的 re 模块是用来处理正则表达式的工具,它提供了一种灵活、强大的方式来搜索、替换和操作文本数据。

findall

re.findall() 是 Python re 模块中一个常用的函数,用于在字符串中查找所有与给定正则表达式模式匹配的内容,并返回一个包含所有匹配项的列表。它的基本语法如下:

python 复制代码
re.findall(pattern, string)
  • pattern 是一个正则表达式,用来描述你想要匹配的模式。
  • string 是你要搜索的目标字符串。

例子:

假设有一个文本包含多个 email 地址,我们想要提取出这些 email 地址:

python 复制代码
import re

text = "Email me at test@example.com or test2@example.com for more information."

emails = re.findall(r'\S+@\S+', text)
print(emails)
  • \S+@\S+ 是一个简单的正则表达式模式,它匹配一个非空白字符序列,然后是 @ 符号,再后面跟着另一个非空白字符序列。这个模式描述了基本的 email 地址格式。

re.findall() 返回一个列表,其中包含在 text 中找到的所有与模式匹配的 email 地址。

特点和注意事项:

  1. 返回列表:re.findall() 返回所有匹配项组成的列表。
  2. 不返回匹配对象:与 re.search()re.match() 不同,findall() 不返回匹配对象,而是返回匹配的字符串本身。
  3. 模式中的分组:如果模式中有分组 ( )re.findall() 会返回元组的列表,每个元组包含匹配到的分组内容。
python 复制代码
import re

text = "John has 3 cats, Jane has 2 dogs."
matches = re.findall(r'(\d+)\s(\w+)', text)
print(matches)  # Output: [('3', 'cats'), ('2', 'dogs')]

这个例子中,正则表达式 (\d+)\s(\w+) 匹配了一些数字和接着的字母单词,并且使用了分组。re.findall() 返回了包含每个匹配组合的元组列表。

re.findall() 在处理文本、数据抽取、简单的文本匹配等任务中都非常有用,但要注意在处理复杂匹配模式时,可能需要更深入的了解和测试正则表达式。

match

re.match() 是 Python 中 re 模块的一个函数,用于在字符串的开头位置查找是否有符合给定正则表达式模式的内容。这个函数尝试从字符串的起始位置开始匹配模式,如果找到匹配,它将返回一个匹配对象;如果没有找到匹配,则返回 None

这是 re.match() 函数的基本语法:

python 复制代码
re.match(pattern, string)
  • pattern 是一个正则表达式,用于描述你想要匹配的模式。
  • string 是要搜索的目标字符串。

示例:

假设我们想要验证一个字符串是否以 "Hello" 开头:

python 复制代码
import re

text = "Hello, how are you?"
match = re.match(r'Hello', text)

if match:
    print("Pattern found:", match.group())
else:
    print("Pattern not found.")

在这个例子中,re.match() 尝试从字符串的开头匹配模式 "Hello"。如果找到匹配,它会返回一个匹配对象,否则返回 None

match 对象的方法和属性:

  • group(): 返回与整个匹配的字符串。
  • start(): 返回匹配的起始位置。
  • end(): 返回匹配的结束位置。
  • span(): 返回一个元组,包含匹配 (开始, 结束) 的位置。
python 复制代码
import re

text = "Hello, how are you?"
match = re.match(r'Hello', text)

if match:
    print("Matched string:", match.group())
    print("Start position:", match.start())
    print("End position:", match.end())
    print("Position span:", match.span())

注意事项:

  1. re.match() 只在字符串的开头位置进行匹配。如果你想要在整个字符串中查找匹配,可以使用 re.search()
  2. 如果匹配成功,re.match() 返回的是一个匹配对象,你可以使用它的方法来获取匹配结果,如 group()start() 等。
  3. 如果没有找到匹配,re.match() 将返回 None

re.match() 对于需要精确匹配字符串开头的情况非常有用,但如果你需要在字符串中间或结尾位置进行匹配,可以考虑使用 re.search() 函数。

re.search() 是 Python 中 re 模块的函数之一,用于在给定的字符串中搜索匹配指定正则表达式模式的内容。与 re.match() 不同,re.search() 不仅仅在字符串的开头进行匹配,而是搜索整个字符串,找到第一个匹配项后便停止搜索,并返回一个匹配对象。

这是 re.search() 函数的基本语法:

python 复制代码
re.search(pattern, string)
  • pattern 是一个正则表达式,用于描述你想要匹配的模式。
  • string 是要搜索的目标字符串。

示例:

假设我们想要在一个字符串中找到数字的位置:

python 复制代码
import re

text = "The price is $25.50."
match = re.search(r'\d+', text)

if match:
    print("Pattern found:", match.group())
    print("Start position:", match.start())
    print("End position:", match.end())
    print("Position span:", match.span())
else:
    print("Pattern not found.")

在这个例子中,re.search() 在给定的字符串中搜索数字 \d+ 的模式。如果找到匹配,它将返回一个匹配对象,否则返回 None

match 对象的方法和属性:

  • group(): 返回与整个匹配的字符串。
  • start(): 返回匹配的起始位置。
  • end(): 返回匹配的结束位置。
  • span(): 返回一个元组,包含匹配 (开始, 结束) 的位置。

注意事项:

  1. re.search() 会在整个字符串中查找第一个匹配项。如果需要查找所有匹配项,可以使用 re.findall()
  2. 如果找到匹配,re.search() 返回的是一个匹配对象,你可以使用它的方法来获取匹配结果,如 group()start() 等。
  3. 如果没有找到匹配,re.search() 将返回 None

re.search() 在需要在字符串中查找第一个匹配项时非常有用,尤其是当你不确定匹配项出现在字符串的什么位置时。

split

re.split() 是 Python re 模块中的一个函数,用于根据正则表达式模式分割字符串。它的作用类似于 str.split() 方法,但不是根据固定的字符分割字符串,而是根据给定的正则表达式模式进行分割。

这是 re.split() 函数的基本语法:

python 复制代码
re.split(pattern, string)
  • pattern 是一个正则表达式,用于描述你想要作为分隔符的模式。
  • string 是要分割的目标字符串。

示例:

假设我们有一个句子,想要根据空格和标点符号分割它:

python 复制代码
import re

text = "Hello, how are you?"
tokens = re.split(r'\W+', text)
print(tokens)

在这个例子中,re.split() 根据模式 \W+(非字母数字下划线的字符)对文本进行分割。它返回一个由分割后的子字符串组成的列表。

参数说明:

  • pattern 定义了分隔符的模式。可以是单个字符,也可以是更复杂的正则表达式。
  • string 是要分割的目标字符串。

注意事项:

  1. 如果模式中有括号,那么括号内的内容也会被包含在结果列表中。
  2. 如果模式中使用了捕获分组,那么分隔符也会包含在结果列表中。
  3. re.split() 不会在最后的空字符串位置进行分割,因此不会返回末尾的空字符串。

示例说明:

python 复制代码
import re

text = "apple, orange, , banana, , mango"
tokens = re.split(r',\s*', text)
print(tokens)

这个例子中,模式 ,\\s* 匹配逗号后面的零个或多个空格。re.split() 根据这个模式分割字符串,并返回一个由分割后的子字符串组成的列表。结果列表中不包含末尾的空字符串。

re.split() 是一个很有用的函数,特别适用于需要根据复杂模式进行字符串分割的情况。

sub

re.sub() 是 Python 中 re 模块的一个函数,用于在字符串中查找与给定正则表达式模式匹配的内容,并将其替换为指定的字符串。它允许你执行在文本中查找并替换特定模式的操作。

这是 re.sub() 函数的基本语法:

python 复制代码
re.sub(pattern, replacement, string)
  • pattern 是一个正则表达式,用于描述你想要匹配的模式。
  • replacement 是要替换匹配内容的字符串。
  • string 是要在其中进行替换操作的目标字符串。

示例:

假设我们想要在文本中替换所有数字为字符串 "NUMBER":

python 复制代码
import re

text = "I have 2 apples and 3 oranges."
new_text = re.sub(r'\d+', 'NUMBER', text)
print(new_text)

在这个例子中,re.sub() 将查找文本中的所有数字,并用字符串 "NUMBER" 替换它们。

参数说明:

  • pattern 定义了要查找和替换的模式。这可以是简单的字符,也可以是更复杂的正则表达式。
  • replacement 是要替换匹配内容的字符串。
  • string 是要在其中进行替换操作的目标字符串。

可选参数:

re.sub() 函数还包含两个可选参数:

  • count: 指定替换的最大次数。默认是 0,表示所有匹配都会被替换。
  • flags: 匹配模式。例如,re.IGNORECASE 可以用来进行不区分大小写的匹配。

示例说明:

python 复制代码
import re

text = "The color of the sky is blue."
new_text = re.sub(r'blue', 'red', text)
print(new_text)

在这个例子中,re.sub() 将找到文本中的 "blue" 并用 "red" 进行替换。

re.sub() 函数是处理文本替换非常有用的工具。它可以用于简单的字符串替换,也可以使用更复杂的正则表达式模式进行高级替换操作。

相关推荐
湫ccc14 分钟前
《Python基础》之pip换国内镜像源
开发语言·python·pip
hakesashou15 分钟前
Python中常用的函数介绍
java·网络·python
菜鸟的人工智能之路25 分钟前
极坐标气泡图:医学数据分析的可视化新视角
python·数据分析·健康医疗
菜鸟学Python26 分钟前
Python 数据分析核心库大全!
开发语言·python·数据挖掘·数据分析
小白不太白95028 分钟前
设计模式之 责任链模式
python·设计模式·责任链模式
喜欢猪猪33 分钟前
Django:从入门到精通
后端·python·django
糖豆豆今天也要努力鸭39 分钟前
torch.__version__的torch版本和conda list的torch版本不一致
linux·pytorch·python·深度学习·conda·torch
何大春1 小时前
【弱监督语义分割】Self-supervised Image-specific Prototype Exploration for WSSS 论文阅读
论文阅读·人工智能·python·深度学习·论文笔记·原型模式
在下不上天1 小时前
Flume日志采集系统的部署,实现flume负载均衡,flume故障恢复
大数据·开发语言·python
SEVEN-YEARS1 小时前
深入理解TensorFlow中的形状处理函数
人工智能·python·tensorflow