Python基础 -- `re` 模块支持的正则表达式

Python re 模块支持的正则表达式

Python 的 re 模块使用与 PCRE(Perl Compatible Regular Expressions)兼容的正则表达式。以下是一些常用的正则表达式语法和概念。

常用正则表达式语法

1. 匹配单个字符

  • .:匹配除换行符外的任意单个字符。
  • \w:匹配字母、数字及下划线,等同于 [a-zA-Z0-9_]
  • \W:匹配非字母、数字及下划线,等同于 [^a-zA-Z0-9_]
  • \d:匹配任意数字,等同于 [0-9]
  • \D:匹配任意非数字字符,等同于 [^0-9]
  • \s:匹配任意空白字符(空格、制表符等),等同于 [ \t\n\r\f\v]
  • \S:匹配任意非空白字符,等同于 [^ \t\n\r\f\v]

2. 边界匹配

  • ^:匹配字符串的开头。
  • $:匹配字符串的结尾。
  • \b:匹配单词边界。
  • \B:匹配非单词边界。

3. 重复匹配

  • *:匹配前面的字符 0 次或多次(如 a* 匹配 0 个或多个 a)。
  • +:匹配前面的字符 1 次或多次(如 a+ 匹配 1 个或多个 a)。
  • ?:匹配前面的字符 0 次或 1 次(如 a? 匹配 0 个或 1 个 a)。
  • {m,n}:匹配前面的字符至少 m 次,至多 n 次(如 a{2,4} 匹配 2 到 4 个 a)。

4. 分组与捕获

  • ():分组并捕获子表达式(如 (abc) 匹配 “abc” 并捕获)。
  • (?:):分组但不捕获(如 (?:abc) 匹配 “abc” 但不捕获)。
  • (?P<name>...):命名捕获组。
  • \n:引用第 n 个捕获的子表达式(如 (abc)\1 匹配 “abcabc”)。

5. 字符集

  • [abc]:匹配 abc 中的任意一个字符。
  • [^abc]:匹配除 abc 以外的任意字符。
  • [a-z]:匹配小写字母 az 之间的任意字符。
  • [0-9]:匹配数字 09

6. 特殊语法

  • |:表示或(如 a|b 匹配 ab)。
  • (?=...):正向先行断言,匹配…前的位置(如 a(?=b) 匹配 “a”,但 “a” 后面必须是 “b”)。
  • (?!...):负向先行断言,匹配非…前的位置(如 a(?!b) 匹配 “a”,但 “a” 后面不能是 “b”)。

正则表达式的种类

  1. POSIX 正则表达式

    • 包括基本正则表达式(BRE)和扩展正则表达式(ERE)。广泛应用于 Unix 和 Linux 系统的工具中。
  2. Perl 兼容正则表达式(PCRE)

    • 现代编程语言中常见的正则表达式标准,功能强大,支持复杂模式匹配和高级特性。
  3. .NET 正则表达式

    • 基于 PCRE,但有一些独特的扩展,如右到左的匹配模式和命名组引用等。
  4. Java 正则表达式

    • 与 PCRE 非常相似,也支持命名捕获组和断言等功能。

Python 的 re 模块采用 PCRE 语法,支持丰富的匹配和断言模式。

示例代码

import re

# 要匹配的字符串
text = "2.49 2.16 1.95 6/189 517739"

# 使用命名捕获组来匹配小数数字
pattern = r"(?P<num1>\d+\.\d+)\s+(?P<num2>\d+\.\d+)\s+(?P<num3>\d+\.\d+)"

# 执行匹配
match = re.search(pattern, text)

if match:
    # 提取并输出匹配结果
    num1 = match.group('num1')
    num2 = match.group('num2')
    num3 = match.group('num3')
    print(f"num1: {num1}, num2: {num2}, num3: {num3}, num1 + num2 : {float(num1) + float(num2)}")
else:
    print("匹配失败")

上一篇:Spring MVC 注解详解:@RequestBody,@RequestParam 和 @PathVariable


下一篇:如何获取 uni-app 应用发布所需的证书、私钥与配置文件