1. re模块概述
在 Python 中,re(Regular Expression) 是一个用于处理正则表达式的模块,它提供了一种强大、灵活、易于阅读和编写的方式,用于匹配和处理文本数据。
1.1 如何使用 re 模块
要使用 re 模块,你需要先导入它,导入语句格式如下:
import re
导入 re 模块后,你就可以使用 re 模块中提供的函数和方法了。
2. re 模块常用方法
2.1 re.match()方法
re.match() 方法尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,返回 None。
下面我们来看一个例子:
import re
# 匹配包含字母 “b" 的单词
text = "The quick brown fox jumps over the lazy dog"
match = re.match(r'.*b.*', text)
if match:
print("Matched")
else:
print("Not Matched")
输出结果为:
Matched
在上面的例子中,我们使用 re.match() 方法来匹配字符串中是否包含字母 “b" 的单词。在正则表达式中,.* 表示匹配任意个字符,包括 0 个字符。因此, r'.*b.*' 表示匹配任意个字符加上一个字母 “b”,再匹配任意个字符,这样就能匹配到包含字母 “b" 的单词。
2.2 re.search()方法
re.search() 方法扫描整个字符串,并返回第一个成功匹配的对象。
下面我们来看一个例子:
import re
# 匹配包含字母 “b" 的单词
text = "The quick brown fox jumps over the lazy dog"
match = re.search(r'b\w+', text)
if match:
print(match.group())
else:
print("Not Matched")
输出结果为:
brown
在上面的例子中,我们使用 re.search() 方法来匹配字符串中第一个包含字母 “b" 的单词。在正则表达式中,\w+ 表示匹配任意个字母或数字(包括下划线),因此, b\w+ 表示匹配以字母 “b" 开头的单词。
2.3 re.findall()方法
re.findall() 方法在字符串中搜索匹配正则表达式的所有子串,并返回一个列表。
下面我们来看一个例子:
import re
# 匹配所有单词
text = "The quick brown fox jumps over the lazy dog"
matches = re.findall(r'\b\w+\b', text)
print(matches)
输出结果为:
['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']
在上面的例子中,我们使用 re.findall() 方法来匹配字符串中所有的单词。在正则表达式中,\b 表示单词边界,\w+ 表示匹配任意个字母或数字(包括下划线),因此, \b\w+\b 表示匹配所有单词。
3. 贪婪模式和非贪婪模式
正则表达式中有贪婪模式和非贪婪模式的概念。贪婪模式指的是尽量匹配更多的文本,而非贪婪模式指的是尽量匹配更少的文本。
3.1 贪婪模式
默认情况下,re 模块中的正则表达式都是贪婪模式。下面我们来看一个例子:
import re
# 贪婪模式
text = "Hello, python"
match = re.match(r'He.*o', text)
if match:
print(match.group())
else:
print("Not Matched")
输出结果为:
Hello, python
在上面的例子中, r'He.*o' 表示匹配以字母 “H" 开头,以字母 “o" 结尾的字符串,.* 表示匹配任意个字符,包括 0 个字符。因为正则表达式是贪婪模式,所以它会匹配最长的以 “H" 开头,以 “o" 结尾的字符串,即 “Hello, python"。
3.2 非贪婪模式
可以在正则表达式后面加上 ? 来表示非贪婪模式。例如, .*? 表示匹配任意字符,但尽量匹配较少的字符。
下面我们来看一个例子:
import re
# 非贪婪模式
text = "Hello, python"
match = re.match(r'He.*?o', text)
if match:
print(match.group())
else:
print("Not Matched")
输出结果为:
Hel
在上面的例子中, r'He.*?o' 表示匹配以字母 “H" 开头,以字母 “o" 结尾的字符串,.*? 表示匹配任意字符,但尽量匹配较少的字符。因为正则表达式是非贪婪模式,所以它只会匹配到 “Hel"。
4. 总结
re 模块是一个强大的正则表达式处理工具,它提供了很多常用的方法,如 match()、search()、findall() 等。在使用 re 模块时,需要注意贪婪模式和非贪婪模式的区别。
贪婪模式指的是尽量匹配更多的文本,而非贪婪模式指的是尽量匹配更少的文本。你可以在正则表达式后面加上 ? 来表示非贪婪模式。
需要注意的是,贪婪模式和非贪婪模式的适用情况不同,具体要根据实际情况进行选择。