Python re模块 | Python正则 函数介绍 flags修饰符全解析

文章目录

  • [1 re基本形式](#1 re基本形式)
  • [2 函数介绍](#2 函数介绍)
    • [2.1 re.compile](#2.1 re.compile)
    • [2.2 re.match](#2.2 re.match)
    • [2.3 re.search](#2.3 re.search)
    • [2.4 re.findall](#2.4 re.findall)
    • [2.5 re.finditer](#2.5 re.finditer)
    • [2.6. re.sub](#2.6. re.sub)
    • [2.7 re.split](#2.7 re.split)
  • [3 flags修饰符](#3 flags修饰符)

re 模块是 Python 标准库中的正则表达式模块,用于对字符串进行正则表达式匹配和操作。正则表达式是一种强大的文本模式匹配工具,允许你通过一种灵活的方式搜索、匹配和替换字符串。以下是 re 模块的一些主要功能和常用函数:

1 re基本形式

复制代码
re.func(pattern,string,flags=0)

参数说明

pattern:模式,正则匹配规则,匹配规则可以看这篇博客

string: 要匹配的字符串

flags:修饰符

2 函数介绍

以下的r'xxx' r开头的单引号扩住的是正则表达式

2.1 re.compile

re.compile(pattern, flags=0)

编译正则表达式模式,返回一个正则表达式对象。这个对象可以用于执行下面的各种正则操作。

python 复制代码
import re
pattern = re.compile(r'\b\w+\b')  # 匹配单词

2.2 re.match

re.match(pattern, string, flags=0)

尝试从字符串的开头匹配正则表达式模式。如果匹配成功,返回第一个匹配对象;否则返回 None

python 复制代码
match = re.match(r'hello', 'hello world')

或者可以通过现成的pattern.match(string)

2.3 re.search

re.search(pattern, string, flags=0)

在字符串中搜索正则表达式模式,返回一个匹配到的匹配对象。如果没有匹配到,返回 None

python 复制代码
search_result = re.search(r'\d+', 'The price is $42')

这里注意re.match和re.search的区别

  • re.match只匹配字符串的开始。如果字符串开始不符合正则表达式,则匹配失败,函数返回None。
  • re.search匹配整个字符串,直到找到一个匹配。

如下面的例子

python 复制代码
import re

print(re.match('abc', 'abcf'))  # 输出 <re.Match object; span=(0, 3), match='abc'>
print(re.match('abc', 'fabc'))  # 输出 None

print(re.search('abc', 'abcf'))  # 输出 <re.Match object; span=(0, 3), match='abc'>
print(re.search('abc', 'fabc'))  # 输出 <re.Match object; span=(1, 4), match='abc'>

2.4 re.findall

re.findall是Python的re模块中的一个函数,它可以找到字符串中所有匹配正则表达式的部分,并返回一个包含这些匹配结果的列表。

例如,考虑下面的字符串和正则表达式:

python 复制代码
import re

text = "apple banana apple banana apple"

# 找到所有的"apple"

print(re.findall('apple', text)) # 输出 ['apple', 'apple', 'apple']

在这个例子中,re.findall('apple', text)找到了字符串中所有的"apple",并返回了一个包含这些"apple"的列表。

2.5 re.finditer

re.finditer() 是 Python 中 re 模块提供的一个函数,用于在字符串中查找所有匹配正则表达式的非重叠子字符串。不同于 re.findall() 返回匹配的字符串列表,re.finditer() 返回一个迭代器,该迭代器产生每个匹配对象的 match 对象。迭代器可以用于for循环等,迭代具体知识,可以查看我的这篇博客Python | 超详细的可迭代对象(原理and代码)_python 可迭代对象-CSDN博客

以下是 re.finditer() 的基本用法:

python 复制代码
import re

pattern = re.compile(r'\d+')

text = 'There are 123 apples and 456 oranges.'

matches = pattern.finditer(text)

for match in matches:
    print(f"Match found: {match.group()} at position {match.start()}-{match.end()}")

在这个例子中,re.finditer() 查找字符串中的所有数字,输出它们的位置和值。

要注意的是,re.finditer() 返回的是一个迭代器

可以使用 for 循环来遍历所有的匹配。每次迭代都会得到一个匹配对象,

可以使用 group() 方法来获取匹配的字符串,使用 start()end() 方法获取匹配的起始和结束位置。

2.6. re.sub

re.sub(pattern, replacement, string, count=0, flags=0)

re.sub() 是 Python 中 re 模块提供的函数之一,用于在字符串中替换正则表达式匹配的文本。

举例如下

python 复制代码
import re

text = "The price of the product is $20. The discount is 10%."

# 将价格替换为'XX'
result = re.sub(r'\$\d+', 'XX', text)

print(result)
# 输出The price of the product is XX. The discount is 10%.

2.7 re.split

re.split(pattern, string, maxsplit=0, flags=0)

使用正则表达式模式拆分字符串,并返回拆分后的子字符串列表。

python 复制代码
import re

text = "Hello World, how are you today?"

# 使用空格分割字符串
words = re.split(r'\s', text)

print(words)
# 输出['Hello', 'World,', 'how', 'are', 'you', 'today?']

在这个例子中,re.split() 根据正则表达式模式 \s(匹配任意空白字符)分割字符串,得到一个包含单词的列表。输出结果为:

输出['Hello', 'World,', 'how', 'are', 'you', 'today?']

还有比如

3 flags修饰符

再介绍flags修饰符,这些修饰符可以用来修改正则表达式的匹配行为。以下是一些常用的修饰符:

  1. re.IGNORECASE (或 re.I):

    • 不区分大小写

    • 示例:匹配所有形式的"hello",不区分大小写。不加的话只会匹配"hello"

      python 复制代码
      import re
      
      pattern = re.compile(r'hello', re.IGNORECASE)
      result = pattern.match('Hello, World!')
      print(result.group())  # 输出: Hello
  2. re.MULTILINE (或 re.M):

    • 正常情况下,只从开头匹配,加上之后会进行多行模式,每一行开头都匹配一次

    • 示例:匹配每一行的开头

      python 复制代码
      import re
      
      text = """
      apple
      banana
      cherry"""
      
      # 默认情况下,^只匹配字符串的开始
      print(re.findall('^banana', text))  # 输出 []
      
      # 如果设置了re.MULTILINE,^也会匹配每一行的开始
      print(re.findall('^banana', text, re.MULTILINE))  # 输出 ['banana']
  3. re.DOTALL (或 re.S):

    • re.DOTALL是Python正则表达式的一个标志,它改变了.(点)的行为。在默认情况下,.匹配除了换行符(\n)之外的任何字符。但是如果设置了re.DOTALL.也会匹配换行符。

    • 示例:匹配包含换行符的多行文本。

      python 复制代码
      import re
      
      text = "apple\nbanana"
      
      # 默认情况下,.不匹配换行符
      print(re.findall('apple.banana', text))  # 输出 []
      
      # 如果设置了re.DOTALL,.也会匹配换行符
      print(re.findall('apple.banana', text, re.DOTALL))  # 输出 ['apple\nbanana']
  4. re.VERBOSE (或 re.X):

    • 允许你编写更易读的正则表达式。当设置了re.VERBOSE后,你可以在正则表达式中添加空格和注释,这些空格和注释不会影响正则表达式的匹配行为。

    • 示例:使用空格和注释的可读正则表达式。 正则表达式内加了注释不影响匹配

      python 复制代码
      import re
      
      pattern = re.compile(r'''
                    \d+   # 匹配数字
                    [a-z]+  # 匹配小写字母
                ''', re.VERBOSE)
      result = pattern.match('123abc')
      print(result.group())  # 输出: 123abc
  5. re.ASCII (或 re.A):

    • 匹配只包含ASCII字符的单词

    • 示例:如!就不会被匹配

      python 复制代码
      import re
      
      pattern = re.compile(r'\w+', re.ASCII)
      result = pattern.match('Hello123!')
      print(result.group())  # 输出: Hello123

这些示例演示了如何使用不同的标志来修改正则表达式的匹配行为。

相关推荐
zhangfeng1133几秒前
R和python 哪个更适合生物信息分析,或者更擅长做什么工作
开发语言·python·r语言·生物信息
蚂蚁数据AntData4 分钟前
DB-GPT 0.7.4 版本更新|开源蚂蚁集团Text2SQL数据集:Falcon、支持GLM-4.5大模型
数据库·gpt·语言模型·开源
qqxhb5 分钟前
系统架构设计师备考第55天——数据库设计融合&物联网层次架构&案例分析
数据库·物联网·系统架构·orm·网络层·感知层·平台应用层
消失在人海中24 分钟前
图形数据库Neo4J简介
数据库·oracle·neo4j
狂盗一枝梅24 分钟前
MySql8.0公共表表达式『CTE』
mysql·cte
liliangcsdn26 分钟前
如何结合langchain、neo4j实现关联检索问答
开发语言·python·langchain·neo4j
凡间客28 分钟前
MySQL Galera Cluster部署
数据库·mysql
熊文豪36 分钟前
KingbaseES电科金仓数据库SQL调优
数据库·sql·kingbasees·电科金仓·kes·sql调优
j七七1 小时前
5分钟搭微信自动回复机器人5分钟搭微信自动回复机器人
运维·服务器·开发语言·前端·python·微信
lgbisha1 小时前
Dify异步接口调用优化实践:解决长时任务处理与网络超时问题
人工智能·python·ai·语言模型