一文入门正则表达式(Regular Expressions)

正则表达式(Regular Expressions,简称regex或regexp)是一种强大的文本处理工具,它允许你通过一种简洁的语法来匹配、查找、替换和验证字符串。无论是在编程还是在日常文本处理中,正则表达式都是一个非常有用的技能。本文将带你入门正则表达式,涵盖其基本概念、语法和常见应用。

1. 正则表达式简介

正则表达式是一种用于描述字符串模式的表达式。它可以用来检查一个字符串是否包含某个子字符串,或者从一个字符串中提取特定的部分,甚至可以用来替换字符串中的某些部分。

2. 基本语法

正则表达式的语法由一系列字符和特殊字符组成,这些特殊字符被称为元字符(metacharacters)。以下是一些基本的元字符和它们的含义:

  • ​.:匹配任意单个字符(除了换行符)。
  • ​^:匹配字符串的开始。
  • ​$:匹配字符串的结束。
  • ​*:匹配前面的字符零次或多次。
  • ​+:匹配前面的字符一次或多次。
  • ​?:匹配前面的字符零次或一次。
  • ​[]:定义一个字符集,匹配其中的任意一个字符。
  • ​[^]:定义一个否定字符集,匹配不在其中的任意一个字符。
  • ​():定义一个捕获组,用于提取或应用量词。
  • ​|:逻辑或,匹配两者中的任意一个。
  • ​\:转义字符,用于匹配元字符本身。

3. 常见应用

3.1 匹配字符串

你可以使用正则表达式来检查一个字符串是否符合某个模式。例如,检查一个字符串是否是一个有效的电子邮件地址:

python 复制代码
import re

# 定义电子邮件地址的正则表达式模式
# ^ 表示字符串的开始
# [a-zA-Z0-9._%+-]+ 表示电子邮件地址的本地部分(即@符号前的部分)可以包含字母(大小写)、数字、点、下划线、百分号、加号和减号,并且至少有一个字符
# @ 表示必须包含一个@符号
# [a-zA-Z0-9.-]+ 表示电子邮件地址的域名部分可以包含字母(大小写)、数字、点和减号,并且至少有一个字符
# \. 表示必须包含一个点
# [a-zA-Z]{2,} 表示顶级域名部分必须包含至少两个字母
# $ 表示字符串的结束
email_pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
email = "example@example.com"

# 使用 re.match 函数检查电子邮件地址是否符合定义的模式
# re.match 函数会从字符串的开头开始匹配,如果匹配成功返回一个匹配对象,否则返回 None
if re.match(email_pattern, email):
    print("Valid email address")        # 有效的邮件地址
else:
    print("Invalid email address")
复制代码

3.2 查找字符串

你可以使用正则表达式来查找字符串中符合某个模式的子字符串。例如,查找一个字符串中的所有电子邮件地址:

python 复制代码
import re

# 定义一个包含电子邮件地址的文本字符串
text = "Contact us at support@example.com or info@example.com"

# 定义电子邮件地址的正则表达式模式
# [a-zA-Z0-9._%+-]+ 表示电子邮件地址的本地部分(即@符号前的部分)可以包含字母(大小写)、数字、点、下划线、百分号、加号和减号,并且至少有一个字符
# @ 表示必须包含一个@符号
# [a-zA-Z0-9.-]+ 表示电子邮件地址的域名部分可以包含字母(大小写)、数字、点和减号,并且至少有一个字符
# \. 表示必须包含一个点
# [a-zA-Z]{2,} 表示顶级域名部分必须包含至少两个字母
email_pattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'

# 使用 re.findall 函数在文本中查找所有符合模式的电子邮件地址
# re.findall 函数会返回一个包含所有匹配结果的列表
emails = re.findall(email_pattern, text)
print(emails)  # 输出: ['support@example.com', 'info@example.com']

3.3 替换字符串

你可以使用正则表达式来替换字符串中符合某个模式的子字符串。例如,将一个字符串中的所有电子邮件地址替换为另一个字符串:

python 复制代码
import re

text = "Contact us at support@example.com or info@example.com"
email_pattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'

# 使用 re.sub 函数将文本中所有符合模式的电子邮件地址替换为 'contact@example.com'
# re.sub 函数会返回一个新的字符串,其中所有匹配的子字符串都被替换为指定的字符串
new_text = re.sub(email_pattern, 'contact@example.com', text)
print(new_text)  # 输出: "Contact us at contact@example.com or contact@example.com"
复制代码

3.4 验证输入

正则表达式常用于验证用户输入,例如检查用户名、密码、电话号码等是否符合特定的格式要求。

python 复制代码
import re  # 导入正则表达式模块

# 定义用户名的正则表达式模式
# ^ 表示字符串的开始
# [a-zA-Z0-9_] 表示用户名可以包含字母(大小写)、数字和下划线
# {3,16} 表示用户名的长度必须在3到16个字符之间
# $ 表示字符串的结束
username_pattern = r'^[a-zA-Z0-9_]{3,16}$'

# 定义一个用户名
username = "user_name123"

# 使用 re.match 函数检查用户名是否符合定义的模式
# re.match 函数会从字符串的开头开始匹配,如果匹配成功返回一个匹配对象,否则返回 None
if re.match(username_pattern, username):
    print("Valid username")  
else:
    print("Invalid username")  # 无效的用户名

4. 总结

正则表达式是一个强大且灵活的工具,适用于各种文本处理任务。通过掌握基本的正则表达式语法和常见应用,你可以在编程和日常工作中更高效地处理字符串。希望这篇文章能帮助你入门正则表达式,并在实际应用中发挥其强大的功能。

相关推荐
九皇叔叔2 天前
Linux Shell 正则表达式中的 POSIX 字符集:用法与实战
linux·运维·正则表达式
m0_64880493_江哥3 天前
用正则方法从中英文本提取英文的python示例
python·mysql·正则表达式
九皇叔叔4 天前
Linux Shell 正则表达式:从入门到实战,玩转文本匹配与处理
linux·mysql·正则表达式
一百天成为python专家4 天前
python爬虫入门(小白五分钟从入门到精通)
开发语言·爬虫·python·opencv·yolo·计算机视觉·正则表达式
蓝桉~MLGT5 天前
Python学习历程——字符串相关操作及正则表达式
python·学习·正则表达式
一晌小贪欢5 天前
Python爬虫第5课:正则表达式与数据清洗技术
爬虫·python·正则表达式·网络爬虫·python爬虫·python3·网页爬虫
MANONGMN6 天前
Linux 通配符与正则表达式(含实战案例+避坑指南)
linux·运维·正则表达式
带土16 天前
18 .shell编程-正则表达式
linux·正则表达式
2025年一定要上岸7 天前
【日常学习】10-15 学习re
学习·算法·正则表达式
Penguin_zlh10 天前
基础 - 正则表达式
正则表达式