正则表达式(Regular Expressions,简称 regex 或 regexp)是一种强大的文本处理工具,它允许用户通过特定的模式来匹配、查找、替换或分割字符串。正则表达式广泛应用于编程、数据清洗、文本分析等领域,其灵活性和高效性使其成为处理文本数据的得力助手。

正则表达式的基础

字符匹配

正则表达式的基本功能是匹配字符。以下是一些基本的字符匹配规则:

  • 普通字符:直接匹配字符本身。例如,a 匹配字符 a
  • .(点号):匹配除换行符之外的任何单个字符。例如,. 匹配任意单个字符。
  • \d:匹配一个数字字符,等价于 [0-9]
  • \D:匹配一个非数字字符,等价于 [^0-9]
  • \w:匹配任意字母、数字或下划线字符,等价于 [A-Za-z0-9_]
  • \W:匹配任意非字母、数字或下划线字符,等价于 [^A-Za-z0-9_]
  • \s:匹配任意空白字符(包括空格、制表符、换行符等)。

字符集

字符集允许匹配一个或多个特定的字符。以下是一些字符集的示例:

  • [abc]:匹配字符 abc
  • [^abc]:匹配除了 abc 之外的任意字符。
  • [a-z]:匹配从 az 的任意一个字符。
  • [A-Z]:匹配从 AZ 的任意一个大写英文字母。
  • [a-zA-Z]:匹配任意一个英文字母。

重复匹配

重复匹配允许指定一个模式重复的次数。以下是一些重复匹配的示例:

  • *:匹配前面的子表达式零次或多次。例如,a* 匹配空字符串或任意个 a
  • +:匹配前面的子表达式一次或多次。例如,a+ 匹配至少一个 a
  • ?:匹配前面的子表达式零次或一次。例如,do(es)? 可以匹配 dodoes
  • {n}:匹配前面的子表达式恰好 n 次。例如,a{2} 匹配两个 a
  • {n,}:匹配前面的子表达式至少 n 次。例如,a{2,} 匹配两个或更多的 a

边界匹配

边界匹配用于指定模式必须出现在字符串的特定位置。以下是一些边界匹配的示例:

  • ^:匹配输入字符串的开始位置。
  • $:匹配输入字符串的结束位置。
  • <:匹配输入字符串的起始位置,但不包括起始位置上的字符。
  • >:匹配输入字符串的结束位置,但不包括结束位置上的字符。

分组与捕获

分组允许将正则表达式的一部分作为一个整体来匹配。以下是一些分组与捕获的示例:

  • ():标记一个子表达式,用于分组匹配。例如,(\d{3})-(\d{2})-(\d{4}) 将匹配电话号码。
  • (?:...):非捕获分组,用于分组但不保存匹配结果。例如,(?:a|b) 匹配 ab,但不保存匹配结果。

特殊字符转义

在某些情况下,您可能需要匹配正则表达式中的特殊字符。以下是一些特殊字符的转义示例:

  • \:转义特殊字符,使其被视为普通字符。例如,\. 匹配点号 .
  • \\:转义反斜杠 \

实例代码

以下是一些使用 Python 正则表达式的实例代码:

”`python import re

匹配电话号码

phone_pattern = r’(\d{3})-(\d{2})-(\d{4})’ phone_number = ‘123-45-6789’ match = re.match(phone_pattern, phone_number) if match:

print("匹配的电话号码:", match.group(0))

查找所有电子邮件地址

emailpattern = r’[a-zA-Z0-9.%+-]+@[a-zA-Z0-9.-]+