本文主要是介绍Python re模块 | Python正则 函数介绍 flags修饰符全解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 1 re基本形式
- 2 函数介绍
- 2.1 re.compile
- 2.2 re.match
- 2.3 re.search
- 2.4 re.findall
- 2.5 re.finditer
- 2.6. re.sub
- 2.7 re.split
- 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)
编译正则表达式模式,返回一个正则表达式对象。这个对象可以用于执行下面的各种正则操作。
import re
pattern = re.compile(r'\b\w+\b') # 匹配单词
2.2 re.match
re.match(pattern, string, flags=0)
尝试从字符串的开头匹配正则表达式模式。如果匹配成功,返回第一个匹配对象;否则返回 None
。
match = re.match(r'hello', 'hello world')
或者可以通过现成的pattern.match(string)
2.3 re.search
re.search(pattern, string, flags=0)
在字符串中搜索正则表达式模式,返回一个匹配到的匹配对象。如果没有匹配到,返回 None
。
search_result = re.search(r'\d+', 'The price is $42')
这里注意re.match和re.search的区别
re.match
只匹配字符串的开始。如果字符串开始不符合正则表达式,则匹配失败,函数返回None。re.search
匹配整个字符串,直到找到一个匹配。
如下面的例子
import reprint(re.match('abc', 'abcf')) # 输出 <re.Match object; span=(0, 3), match='abc'>
print(re.match('abc', 'fabc')) # 输出 Noneprint(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
模块中的一个函数,它可以找到字符串中所有匹配正则表达式的部分,并返回一个包含这些匹配结果的列表。
例如,考虑下面的字符串和正则表达式:
import retext = "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()
的基本用法:
import repattern = 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 模块提供的函数之一,用于在字符串中替换正则表达式匹配的文本。
举例如下
import retext = "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)
使用正则表达式模式拆分字符串,并返回拆分后的子字符串列表。
import retext = "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修饰符,这些修饰符可以用来修改正则表达式的匹配行为。以下是一些常用的修饰符:
-
re.IGNORECASE (或 re.I):
-
不区分大小写
-
示例:匹配所有形式的"hello",不区分大小写。不加的话只会匹配"hello"
import repattern = re.compile(r'hello', re.IGNORECASE) result = pattern.match('Hello, World!') print(result.group()) # 输出: Hello
-
-
re.MULTILINE (或 re.M):
-
正常情况下,只从开头匹配,加上之后会进行多行模式,每一行开头都匹配一次
-
示例:匹配每一行的开头
import retext = """ apple banana cherry"""# 默认情况下,^只匹配字符串的开始 print(re.findall('^banana', text)) # 输出 []# 如果设置了re.MULTILINE,^也会匹配每一行的开始 print(re.findall('^banana', text, re.MULTILINE)) # 输出 ['banana']
-
-
re.DOTALL (或 re.S):
-
re.DOTALL
是Python正则表达式的一个标志,它改变了.
(点)的行为。在默认情况下,.
匹配除了换行符(\n
)之外的任何字符。但是如果设置了re.DOTALL
,.
也会匹配换行符。 -
示例:匹配包含换行符的多行文本。
import retext = "apple\nbanana"# 默认情况下,.不匹配换行符 print(re.findall('apple.banana', text)) # 输出 []# 如果设置了re.DOTALL,.也会匹配换行符 print(re.findall('apple.banana', text, re.DOTALL)) # 输出 ['apple\nbanana']
-
-
re.VERBOSE (或 re.X):
-
允许你编写更易读的正则表达式。当设置了
re.VERBOSE
后,你可以在正则表达式中添加空格和注释,这些空格和注释不会影响正则表达式的匹配行为。 -
示例:使用空格和注释的可读正则表达式。 正则表达式内加了注释不影响匹配
import repattern = re.compile(r'''\d+ # 匹配数字[a-z]+ # 匹配小写字母''', re.VERBOSE) result = pattern.match('123abc') print(result.group()) # 输出: 123abc
-
-
re.ASCII (或 re.A):
-
匹配只包含ASCII字符的单词
-
示例:如!就不会被匹配
import repattern = re.compile(r'\w+', re.ASCII) result = pattern.match('Hello123!') print(result.group()) # 输出: Hello123
-
这些示例演示了如何使用不同的标志来修改正则表达式的匹配行为。
这篇关于Python re模块 | Python正则 函数介绍 flags修饰符全解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!