一文入门正则表达式(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. 总结

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

相关推荐
吴声子夜歌1 天前
正则指引——Ruby
开发语言·正则表达式·ruby
吴声子夜歌1 天前
正则指引——Golang
开发语言·golang·正则表达式
吴声子夜歌2 天前
正则指引——PHP
开发语言·正则表达式·php
吴声子夜歌4 天前
正则指引——断言
正则表达式
吴声子夜歌4 天前
正则指引——匹配原理
java·正则表达式
吴声子夜歌5 天前
正则表达式——环视
开发语言·正则表达式
吴声子夜歌6 天前
正则表达式——边界
正则表达式
营养充电站6 天前
C++23 新特性在 CLion 中的实战体验
macos·docker·jupyter·正则表达式
吴声子夜歌7 天前
正则表达式——字符组
正则表达式