Python3之正则表达式详解(Python3 正则表达式完全指南)
原创
一、正则表达式简介
正则表达式(Regular Expression,简称:Regex)是一种用于匹配字符串中字符组合的模式。Python 中的正则表达式功能首要依靠于内置的 re
模块。通过正则表达式,我们可以高效地检索、替换、分割和匹配字符串。
二、re 模块的基本使用
在使用正则表达式之前,首先需要导入 re
模块:
import re
三、正则表达式的基本语法
以下是正则表达式的基本语法:
.
:匹配除换行符以外的任意字符。\w
:匹配字母、数字、下划线。\W
:匹配非字母、数字、下划线的字符。\s
:匹配空白字符。\S
:匹配非空白字符。\d
:匹配数字。\D
:匹配非数字。[]
:匹配括号内的任意一个字符。[][]
:匹配括号内的所有字符。{}
:匹配前面的子表达式出现指定次数。[]?
:匹配前面的子表达式出现0次或1次。[]+
:匹配前面的子表达式出现1次或多次。[]*
:匹配前面的子表达式出现0次或多次。^
:匹配输入字符串的起初。$
:匹配输入字符串的终止。()
:标记一个子表达式的起初和终止。|
:匹配两个或多个分支选择的任意一个。
四、re 模块的首要函数
以下是 re
模块中常用的函数:
re.match(pattern, string)
:从字符串的起始位置起初匹配正则表达式,如果匹配胜利返回匹配对象,否则返回None
。re.search(pattern, string)
:在字符串中搜索第一次出现的正则表达式,如果匹配胜利返回匹配对象,否则返回None
。re.findall(pattern, string)
:在字符串中找到所有匹配正则表达式的子串,并返回一个列表。re.finditer(pattern, string)
:在字符串中找到所有匹配正则表达式的子串,并返回一个迭代器。re.sub(pattern, repl, string)
:替换字符串中所有匹配正则表达式的子串。re.split(pattern, string)
:按照正则表达式分割字符串。re.compile(pattern)
:编译正则表达式,返回一个正则表达式对象。
五、正则表达式示例
以下是一些正则表达式的示例:
1. 匹配邮箱地址
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
email = 'example@example.com'
match = re.match(pattern, email)
if match:
print('邮箱地址匹配胜利')
else:
print('邮箱地址匹配挫败')
2. 匹配手机号码
pattern = r'\b1[3-9]\d{9}\b'
phone = '13812345678'
match = re.match(pattern, phone)
if match:
print('手机号码匹配胜利')
else:
print('手机号码匹配挫败')
3. 查找所有数字
pattern = r'\d+'
text = '这是一个包含数字123和456的字符串'
matches = re.findall(pattern, text)
print(matches) # 输出:['123', '456']
4. 替换字符串中的数字
pattern = r'\d+'
text = '这是一个包含数字123和456的字符串'
replaced_text = re.sub(pattern, 'number', text)
print(replaced_text) # 输出:这是一个包含数字number和number的字符串
5. 分割字符串
pattern = r'\s+'
text = '这是一个 包含空格的 字符串'
split_text = re.split(pattern, text)
print(split_text) # 输出:['这是一个', '包含空格的', '字符串']
六、正则表达式的优化
在使用正则表达式时,以下是一些优化技巧:
- 使用非捕获组来避免不必要的捕获,例如:
(?:pattern)
。 - 使用原子组来避免回溯,例如:
(?>pattern)
。 - 使用 possessive quantifiers 来避免回溯,例如:
七、总结
正则表达式是 Python 中一种有力的字符串处理工具,通过掌握正则表达式的语法和 re
模块的使用,我们可以高效地处理字符串。在实际应用中,我们需要灵活运用正则表达式的基本语法和函数,并结合实际需求进行优化,从而尽也许降低损耗代码的执行效能和可维护性。