python中的正则表达式语法
Python中的正则表达式(Regular Expression,简称Regex)是一个非常强大的文本处理工具,它允许你使用特定的模式(即正则表达式)来匹配、查找、替换或分割字符串。Python通过re
模块来支持正则表达式的操作。下面我将从您提到的几个方面介绍Python中的正则表达式语法,并给出相应的例子。
1. 行定位符
^
:匹配行的开始。$
:匹配行的结束。
例子:
import re
text = "Hello, world!"
print(re.match(r"^Hello", text)) # 匹配成功,因为'Hello'在行首
print(re.search(r"world!$", text)) # 匹配成功,因为'world!'在行尾
2. 元字符
Python(以及大多数正则表达式引擎中),元字符(Metacharacters)是具有特殊含义的字符。它们不代表它们自身的字面量字符,而是被用来表示某种特殊含义,如匹配一个字符集合、匹配任意字符、表示位置、分组等。元字符使得正则表达式能够以一种非常灵活和强大的方式来匹配文本模式。
以下是一些常见的元字符及其含义:
-
.
:匹配除换行符\n
之外的任何单个字符。 -
^
:匹配输入字符串的开始位置。如果设置了MULTILINE
标志,^
也匹配换行符后的开始位置。 -
$
:匹配输入字符串的结束位置。如果设置了MULTILINE
标志,$
也匹配换行符之前的位置。 -
*
:匹配前面的子表达式零次或多次。 -
+
:匹配前面的子表达式一次或多次。 -
?
:匹配前面的子表达式零次或一次,也用于非贪婪模式的开启。 -
{n}
:n
是一个非负整数。匹配确定的n
次。 -
{n,}
:n
是一个非负整数。至少匹配n
次。 -
{n,m}
:m
和n
均为非负整数,其中n <= m
。最少匹配n
次且最多匹配m
次。 -
[xyz]
:字符集合。匹配所包含的任意一个字符。 -
[^xyz]
:负值字符集合。匹配未包含的任意字符。 -
[a-z]
:字符范围。匹配指定范围内的任意字符。 -
\b
:匹配一个单词边界,即单词和空格之间的位置。 -
\B
:非单词边界匹配。 -
()
:分组。将正则表达式的一部分括起来,以便可以作为一个整体来引用或进行重复等操作。 -
|
:选择。匹配|
左右两边的表达式之一。 -
\
:转义字符。用于匹配那些具有特殊含义的字符,如.
、*
、?
、(
、)
等。 -
\d
:匹配一个数字字符。等价于[0-9]
。 -
\D
:匹配一个非数字字符。等价于[^0-9]
。 -
\s
:匹配任何空白字符,包括空格、制表符、换页符等。等价于[\f\n\r\t\v]
。 -
\S
:匹配任何非空白字符。等价于[^\f\n\r\t\v]
。 -
\w
:匹配包括下划线的任何单词字符。等价于[A-Za-z0-9_]
。 -
\W
:匹配任何非单词字符。等价于[^A-Za-z0-9_]
。
注意:在Python字符串中,反斜杠\
是一个转义字符,所以当你需要在字符串中表示元字符(如\n
表示换行符,或\
表示反斜杠本身)时,你需要使用双反斜杠\\
来避免被Python解释器解释为转义序列。但在原始字符串(以r
或R
为前缀的字符串)中,你不需要这样做,因为原始字符串不会处理反斜杠作为转义字符。例如,r"\n"
表示包含反斜杠和n
字符的字符串,而不是换行符。
元字符在正则表达式中具有特殊含义,如.
匹配除换行符以外的任意单个字符。
例子:
text = "abc123"
print(re.search(r".123", text)) # 匹配成功,'.'匹配了'a'
3. 重复
*
:匹配前面的子表达式零次或多次。+
:匹配前面的子表达式一次或多次。?
:匹配前面的子表达式零次或一次。{n}
:n 是一个非负整数。匹配确定的 n 次。{n,}
:n 是一个非负整数。至少匹配n 次。{n,m}
:m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
例子:
text = "aabcabbcabbbc"
print(re.findall(r"ab{2}c", text)) # ['abbc', 'abbc']
print(re.findall(r"ab{2,}c", text)) # ['abbc', 'abbbc']
4. 字符类
字符类表示一个字符集合,匹配方括号中的任意字符。
[abc]
:匹配’a’、‘b’或’c’。[a-z]
:匹配任何小写字母。[A-Z]
:匹配任何大写字母。[0-9]
:匹配任何数字。[\s]
:匹配任何空白字符,等价于[\t\n\r\f\v]
。
例子:
text = "abc123 XYZ"
print(re.findall(r"[A-Z]", text)) # ['X', 'Y', 'Z']
5. 排除字符
在字符类中使用^
字符来表示排除,即匹配不在字符类中的任意字符。
例子:
text = "abc123 XYZ"
print(re.findall(r"[^A-Z]", text)) # 匹配除了大写字母的所有字符
6. 选择字符
使用|
表示选择,匹配|
左右表达式中的任意一个。
例子:
text = "yes or no"
print(re.search(r"yes|no", text)) # 匹配'yes'
7. 转义字符
在正则表达式中,一些字符有特殊含义(如.
、*
、?
等)。如果你想匹配这些特殊字符本身,就需要使用\
进行转义。
例子:
text = "c:\\newfolder\\myfile.txt"
print(re.search(r"c:\\newfolder\\", text)) # 匹配路径
8. 分组
使用圆括号()
将表达式分组,可以对整个分组使用重复、选择等元字符。分组还可以用于捕获匹配的文本。
例子:
text = "abc123def456"
match = re.search(r"(\d+)", text)
if match:
print(match.group(1)) # 捕获第一个分组的内容,即'123'
Python中的正则表达式语法
在Python中,使用re
模块提供的函数(如re.match()
, re.search()
, re.findall()
, re.sub()
, re.split()
等)来应用正则表达式。上述所有例子都展示了如何在Python中使用re
模块和正则表达式。