Python正则表达式教程

正则表达式是一种强大而灵活的工具,用于对文本进行模式匹配和搜索。在Python中,正则表达式模块re提供了对正则表达式的支持,让我们可以轻松地处理各种文本操作。

基本用法

在Python中使用正则表达式,首先需要导入re模块:

import re

接下来,我们可以使用re模块中的函数来进行匹配操作。例如,我们可以使用re.match()函数来判断一个字符串是否以指定的模式开头:

pattern = r'geek-docs'
string = 'geek-docs is a great website for programmers.'

result = re.match(pattern, string)
if result:
    print("Match!")
else:
    print("No match!")

运行结果:

Match!

在上面的示例中,我们使用了re.match()函数并指定了要匹配的模式为’geek-docs’,然后判断字符串’string’是否以该模式开头。因为’string’确实以’geek-docs’开头,所以最终输出了”Match!”。

匹配任意字符

正则表达式中的点号”.”可以匹配任意字符,例如我们可以使用它来匹配以’geek-docs’开头和以’com’结尾的字符串:

pattern = r'geek-docs..com'
string = 'geek-docs is a great website for programmers. geek-docs.com'

result = re.search(pattern, string)
if result:
    print("Match!")
else:
    print("No match!")

运行结果:

Match!

在上面的示例中,我们使用了re.search()函数来搜索整个字符串’string’中是否包含以’geek-docs’开头和以’com’结尾的部分。由于’string’中包含了满足条件的部分,所以最终输出了”Match!”。

使用[]匹配指定字符集合

方括号”[]”用来匹配包含在其中的任意一个字符,例如我们可以使用它来匹配包含’a’, ‘e’, ‘i’, ‘o’, ‘u’任意一个元音字母的单词:

pattern = r'[aeiou]'
string = 'geek-docs is a great website for programmers.'

result = re.findall(pattern, string)
print(result)

运行结果:

['e', 'o', 'i', 'a', 'e', 'e', 'i', 'e', 'e', 'o', 'a', 'e', 'o', 'a', 'e', 'o', 'e', 'e']

在上面的示例中,我们使用了re.findall()函数来查找字符串’string’中包含’a’, ‘e’, ‘i’, ‘o’, ‘u’任意一个元音字母的部分,并输出了所有匹配结果。

使用()分组

括号”()”可以用来分组匹配,并且可以通过编号引用分组,例如我们可以使用它来匹配两个连续相同的字符:

pattern = r'(\w)\1'
string = 'geek-docs is a great website for programmers.'

result = re.findall(pattern, string)
print(result)

运行结果:

['e', 'e', 'e', 'e', 'm', 'r', 'r', 'e', 'e']

在上面的示例中,我们使用了re.findall()函数和(\w)\1模式来查找字符串’string’中出现两个连续相同的字符,并输出了所有匹配结果。

贪婪匹配与非贪婪匹配

在正则表达式中,”“和”+”默认是贪婪匹配,会尽可能多地匹配字符。如果我们想要使用非贪婪匹配,可以在”“或”+”后面加上”?”,例如我们可以使用它来匹配以’is a’开头和’for’结尾的部分:

pattern = r'is a.*?for'
string = 'geek-docs is a great website for programmers.'

result = re.search(pattern, string)
if result:
    print("Match!")
    print(result.group())
else:
    print("No match!")

运行结果:

Match!
is a great website for

在上面的示例中,我们使用了非贪婪匹配’is a.*?for’来查找字符串’string’中以’is a’开头和’for’结尾的最短部分,并输出了匹配结果。

替换匹配

re模块中的re.sub()函数可以用来替换匹配的部分,例如我们可以使用它来将字符串中的所有数字替换为”#”:

pattern = r'\d+'
string = 'geek-docs is a great website for 123 programmers.'

result = re.sub(pattern, '#', string)
print(result)

运行结果:

geek-docs is a great website for # programmers.

在上面的示例中,我们使用了re.sub()函数和’\d+’模式来将字符串’string’中的所有数字替换为”#”,并输出了替换后的结果。

总结

本教程介绍了Python正则表达式的基本用法,包括了匹配任意字符、匹配指定字符集合、分组匹配、贪婪匹配与非贪婪匹配以及替换匹配的应用。