Python 正则表达式基础教程


发布日期 : 2023-02-27 14:30:56 UTC

访问量: 10 次浏览

Python 正则表达式

正则表达式是一种用于匹配字符串的强有力的工具。它们是在各种编程语言中广泛应用的,包括Python。
在本文中,我们会详细阐述Python正则表达式的含义和使用方法。

正则表达式模块

在 Python 中,我们需要导入 re 模块才能使用正则表达式。以下是导入模块的代码示例:

import re

匹配字符

使用正则表达式时,我们可以使用字符来匹配相应的字符串。以下是正则表达式字符的列表:

字符描述
.匹配除了换行符外的任意字符
\w匹配字母、数字或下划线
\W匹配非字母、数字或下划线
\d匹配数字
\D匹配非数字
\s匹配任意空白字符
\S匹配非空白字符
\b匹配单词边界
\B匹配非单词边界

下面是匹配字符的用例代码:

import re

text = "The quick brown fox jumps over the lazy dog."
pattern = r"fox"
matches = re.findall(pattern, text)
print(matches) # 输出 ["fox"]

匹配集合

我们可以使用方括号 [] 来匹配字符集合。匹配集合中可以包括字符或字符范围。
以下是匹配集合的代码示例:

import re

text = "John has 2 cats and 1 dog."
pattern = r"[0123456789]"
matches = re.findall(pattern, text)
print(matches) # 输出 ["2", "1"]

我们还可以使用 - 来指定字符范围。例如 [a-z] 表示匹配所有小写字母。
以下是匹配字符集合的代码示例:

import re

text = "John has 2 cats and 1 dog."
pattern = r"[0-9]"
matches = re.findall(pattern, text)
print(matches) # 输出 ["2", "1"]

匹配重复次数

我们可以使用花括号 {} 来指定匹配重复次数。可以指定一个数字,表示该字符需要精确匹配该次数;或者指定范围,例如 {1,3} 表示该字符需要匹配 1 到 3 次。以下是匹配重复次数的代码示例:

import re

text = "abccbbcccddddeeeeffff"
pattern = r"c{2,3}"
matches = re.findall(pattern, text)
print(matches) # 输出 ["cc", "ccc"]

在以上例子中,我们匹配了字符串中连续出现 2 到 3 次的字符 c

匹配起始和结束

在有些情况下,我们需要匹配字符串的起始和结束位置。可以使用 ^ 表示字符串的起始位置;使用 $ 表示字符串的结束位置。以下是匹配起始和结束位置的代码示例:

import re

text = "The quick brown fox jumps over the lazy dog."
pattern = r"^T.*g\.$"
matches = re.findall(pattern, text)
print(matches) # 输出 ["The quick brown fox jumps over the lazy dog."]

在以上例子中,我们使用 ^T 匹配字符串的起始位置,使用 .* 匹配任意字符,使用 g\. 匹配结尾的字符 g.
因此,输出为整个字符串。

分组匹配

在正则表达式中,我们可以将元素分成组,以便更方便地管理。可以使用圆括号 () 将元素分成组。
以下是分组匹配的代码示例:

import re

text = "John has 2 cats and 1 dog."
pattern = r"(cats|dog)"
matches = re.findall(pattern, text)
print(matches) # 输出 ["cats", "dog"]

在以上例子中,我们使用 () 将元素分成两组:
catsdog 。使用 | 表示或逻辑运算,可以匹配两组中的任何一个。

替换字符

我们还可以使用正则表达式来替换字符串中的字符。可以使用 re.sub() 函数。
以下是替换字符的代码示例:

import re

text = "John has 2 cats and 1 dog."
pattern = r"([0-9]+)"
replaced_text = re.sub(pattern, "number", text)
print(replaced_text) # 输出 "John has number cats and number dog."

在以上例子中,我们使用
()
将匹配到的数字分组,然后使用
re.sub()
函数将匹配到的数字替换为字符串
"number"

贪婪与非贪婪匹配

当在一个正则表达式中出现多个匹配符时,默认情况下采用贪婪模式。这意味着,匹配字符会尽可能多地匹配,直到无法匹配为止。
例如,在以下示例中,匹配符 .* 匹配了整个字符串,而不是匹配 "foo"

import re

text = "foo bar baz"
pattern = r"foo.*baz"
matches = re.findall(pattern, text)
print(matches) # 输出 ["foo bar baz"]

如果想要采用非贪婪模式,可以在匹配符后面添加 ? 。在以下示例中,匹配符 .*? 仅匹配到了 "foo"

import re

text = "foo bar baz"
pattern = r"foo.*?baz"
matches = re.findall(pattern, text)
print(matches) # 输出 ["foo baz"]

结论

正则表达式是 Python 中一种高效匹配字符串的工具。
通过使用一些匹配字符、匹配集合、匹配重复次数、匹配起始和结束、分组匹配、替换字符等技术,
我们可以根据需要匹配和替换字符串。同时,还需要注意贪婪和非贪婪匹配的区别,以便更好地运用正则表达式。