正则表达式(也称为 RegEx)是用于匹配文本中模式的强大工具。它们广泛应用于文本处理、数据验证和搜索操作。比如需要处理字符串以验证用户输入的数据、验证 URL 格式、替换段落中的单词等。几乎所有主要的编程语言都支持正则表达式。正则表达式有以下主要用途:
-
在大量文本中搜索特定项目。
例如,你可能希望在某些内容中使用文本编辑器识别出所有的电子邮件地址。
-
替换特定项目。
例如,你可能希望通过文本编辑器将一些格式不佳的 HTML 中的所有大写标签替换为小写等效标签。
-
验证输入。
例如,你可能希望检查一个密码是否符合某些条件,如包含大写和小写字母、数字、标点符号等,用于你正在编写的程序中。
-
协调操作。
例如,你可能希望处理某个目录中的某些文件,但只在它们符合特定条件时才进行处理,这通常在命令行中进行。
-
重新格式化文本。
例如,你可能将数据从一个程序导出为文本文件,然后通过文本编辑器修改其布局,以便将其导入另一个程序中。
什么是正则表达式
正则表达式是一串字符,形成一个搜索模式。当你在文本中搜索数据时,可以使用这个搜索模式来描述你要查找的内容。正则表达式可以用于执行各种文本搜索和文本替换操作。正则表达式让你能够轻松进行复杂的文本搜索和操作。它们具有高度的灵活性,可用于广泛的任务,从简单搜索到高级文本处理。
Python 有一个专门用于处理正则表达式的包叫做
re
。它包含不同的函数,如
.search()、.split()、.findall()、.sub()
等。
从一些基本的正则表达式语法开始,这些是构建更复杂模式的基础。
元字符(Metacharacters)
元字符(
Metacharacters
)是在正则表达式中具有特殊含义的字符。
.
: 匹配除换行符之外的任何字符。
^
:
用于匹配字符串的开始位置,或者在中括号内使用时表示对字符集的否定(即取反)
。
$
: 匹配字符串的结束。
*
:
(量词)
匹配前面元素的0次或多次重复。
+
:
(量词)
匹配前面元素的1次或多次重复。
?
:
(量词)
匹配前面元素的0次或1次重复。
{}
: (量词)大括号用于匹配次数。
[]
: 匹配括号内的任何单个字符。
()
:括号用于将正则表达式的部分进行分组。
\
:反斜杠还可以用来引入一些特殊的字符序列,这些序列在正则表达式中具有特定的含义;转义特殊字符。
pattern = r'a.b'
text = 'a1b'
match = re.search(pattern, text)
print(match)
量词(Quantifier)
量词
(Quantifier)
指定了为了匹配成功,字符、组或字符类必须出现的实例数量。
*
:匹配前面的元素0次或多次。
+
:匹配前面的元素1次或多次。
?
: 匹配前面的元素0次或1次。
{n}
: 匹配前面的元素恰好n次。
{n,}:
匹配前面的元素n次或更多次。
{n,m}:
匹配前面的元素n次到m次。
字符类(Character Classes)
字符类匹配一组字符中的任何一个。
\d
:匹配任何数字。等价于 [0-9]。
\D
:匹配任何非数字字符。等价于 [^0-9]。
\w
:匹配任何字母数字字符或下划线。等价于 [a-zA-Z0-9_]。
\W
:匹配任何非字母数字字符。等价于 [^a-zA-Z0-9_]。
\s
:匹配任何空白字符。
\S
:匹配任何非空白字符。
print(re.search(r'\d', '123abc'))
print(re.search(r'\D', '123abc') )
print(re.search(r'\w', '123abc'))
print(re.search(r'\W', '123abc'))
print(re.search(r'\s', '123abc'))
print(re.search(r'\S', '123abc'))
锚点(Anchors)
锚点用于匹配字符串中的位置。
^
:
符号用于匹配字符串的开始位置。