您的位置:

Python 正则表达式:简单、高效的文本匹配工具

Python正则表达式是一种方便、简单、高效的文本匹配工具。它通过一系列复杂的规则来匹配和提取文本中的特定内容,这种方法非常灵活,可以帮助程序员处理各种不同的文本处理任务。

一、基本概念

正则表达式是一种描述文本模式的语言,用于在文本中匹配特定的字符组合。它在Python中被广泛使用,为文本处理带来了很多便利。

在正则表达式中有一些基本的符号代表不同的字符,比如“.”代表任意一个字符,“\d”代表任意一个数字等等。除此之外,还有一些特殊符号和语法,用于描述匹配规则、字符集、量词等等。

下面是一个简单的正则表达式例子,匹配所有以字母a开头、字母b结尾的单词:

import re

text = "ababccca"
pattern = r"a.*?b"

result = re.findall(pattern, text)
print(result) #输出:['ab', 'ab']

通过使用re模块中的findall函数,可以方便地从文本中取出满足正则表达式要求的所有字符串。

二、常用语法

正则表达式中有很多不同的语法,以下介绍几种最常见的语法:

1. 字符

最基本的正则表达式是由单个字符组成的。比如,正则表达式“a”匹配所有的字符a:

import re

text = "abcde"
pattern = r"a"

result = re.findall(pattern, text)
print(result) #输出:['a']

当多个字符直接相连时,表示这些字符必须按照顺序出现在文本中。比如,正则表达式“abc”匹配所有字符串中连续出现的abc字符组合:

import re

text = "abcdeabc"
pattern = r"abc"

result = re.findall(pattern, text)
print(result) #输出:['abc', 'abc']

2. 字符集

字符集是由一组方括号包围的字符组成的,表示匹配其中任意一个字符。比如,正则表达式“[abc]”可以匹配所有包含a、b或c的字符组合:

import re

text = "abccde"
pattern = r"[abc]"

result = re.findall(pattern, text)
print(result) #输出:['a', 'b', 'c', 'c']

字符集中还可以使用连字符“-”,表示匹配两个字符之间的所有字符。比如,正则表达式“[a-c]”等价于“[abc]”:

import re

text = "abcccde"
pattern = r"[a-c]"

result = re.findall(pattern, text)
print(result) #输出:['a', 'b', 'c', 'c', 'c']

3. 量词

量词是用于描述字符重复次数的语法。常用的量词包括“*”(0或多次)、“+”(1或多次)、“?”(0或1次)等。

比如,正则表达式“a*”可以匹配任意多个连续的a字符:

import re

text = "aaaabc"
pattern = r"a*"

result = re.findall(pattern, text)
print(result) #输出:['aaaa', '', 'a']

正则表达式“a+”可以匹配至少一个a字符:

import re

text = "aaaabc"
pattern = r"a+"

result = re.findall(pattern, text)
print(result) #输出:['aaaa']

4. 定位符

定位符是用于描述匹配位置的语法,常用的定位符包括“^”(匹配字符串开始位置)、“\$”(匹配字符串结束位置)、“\b”(匹配单词的边界)等。

比如,正则表达式“^a”可以匹配所有以a开头的字符串:

import re

text = "abcde"
pattern = r"^a"

result = re.findall(pattern, text)
print(result) #输出:['a']

正则表达式“\bthe\b”可以匹配所有独立的单词the:

import re

text = "the cat is on the mat"
pattern = r"\bthe\b"

result = re.findall(pattern, text)
print(result) #输出:['the']

三、实战应用

正则表达式在文本处理中应用非常广泛,下面介绍几种实际应用案例:

1. 提取网页中的链接

使用Python正则表达式可以方便地从HTML网页中提取链接:

import re
import requests

url = "https://www.baidu.com/"
response = requests.get(url)
text = response.text

pattern = r''
links = re.findall(pattern, text)

for link in links:
    print(link)

  

上述代码通过requests模块获取百度首页HTML内容,然后使用正则表达式提取其中所有链接,最后通过遍历打印出所有链接地址。

2. 过滤敏感词

使用Python正则表达式可以方便地过滤文本中的敏感词汇:

import re

text = "我爱lenovo电脑!"
sensitive_words = ["lenovo", "电脑"]

# 构造正则表达式
pattern = r"|".join(sensitive_words)

# 正则表达式匹配
filtered_text = re.sub(pattern, "***", text)

print(filtered_text) #输出:我爱***!

上述代码中,我们首先构造了一个正则表达式,包含了要过滤的敏感词汇。然后使用re.sub函数将所有匹配到的敏感词替换成特定的字符串,这里以“***”为例。

3. 验证用户输入

使用Python正则表达式可以方便地验证用户的输入数据是否符合要求,比如邮箱、手机号码等等。

import re

email = "test@test.com"
mobile = "13888888888"

# 邮箱正则表达式
email_pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"

# 手机号码正则表达式
mobile_pattern = r"1[3-9]\d{9}"

# 邮箱验证
if re.match(email_pattern, email):
    print("邮箱格式正确")

# 手机号码验证
if re.match(mobile_pattern, mobile):
    print("手机号码格式正确")

上述代码中,我们分别使用了对应的正则表达式来验证邮箱和手机号码是否符合要求,如果匹配成功,则输出验证通过。

四、总结

Python正则表达式是一种非常方便、简单、高效的文本匹配工具,具有广泛的应用场景。使用Python正则表达式可以方便地从HTML网页中提取链接、过滤敏感词汇、验证用户输入数据等等。如果你希望更深入地学习正则表达式,可以查阅Python官方文档和一些优秀的博客资料。