Python 正则表达式变得简单

正则表达式 (regex) 是用于根据模式匹配和操作字符串的强大工具。在 Python 中,re 模块提供对正则表达式的支持,使您可以高效地执行复杂的字符串操作。本文将向您介绍正则表达式的基础知识,并向您展示如何在 Python 中有效地使用它们。

开始使用 re 模块

要在 Python 中使用正则表达式,您需要导入 re 模块。此模块提供了几个用于处理正则表达式模式的函数:

  • re.match() - 仅在字符串的开头检查是否匹配。
  • re.search() - 在整个字符串中搜索匹配项。
  • re.findall() - 查找字符串中的所有匹配项并将它们作为列表返回。
  • re.sub() — 用指定的替换项替换字符串中的匹配项。

基本模式匹配

正则表达式使用特殊字符来定义搜索模式。以下是一些基本模式:

  • . - 匹配除换行符之外的任意单个字符。
  • \d — 匹配任何数字(等同于 [0-9])。
  • \w — 匹配任何字母数字字符(相当于 [a-zA-Z0-9_])。
  • \s — 匹配任何空格字符。
  • ^——匹配字符串的开头。
  • $——匹配字符串的结尾。

示例

以下是一些演示基本模式匹配的示例:

import re

# Match a pattern at the beginning of a string
result = re.match(r'Hello', 'Hello, World!')
print(result.group())  # Output: Hello

# Search for a pattern in the entire string
result = re.search(r'\d+', 'There are 24 hours in a day.')
print(result.group())  # Output: 24

将正则表达式与组结合使用

组用于捕获匹配文本的部分。它们使用括号定义。例如,要提取模式的特定部分,您可以使用组:

pattern = r'(\d{3})-(\d{2})-(\d{4})'
text = 'My number is 123-45-6789.'

# Find all matches with groups
match = re.search(pattern, text)
if match:
    print(f'Area Code: {match.group(1)}')  # Output: 123
    print(f'Prefix: {match.group(2)}')     # Output: 45
    print(f'Suffix: {match.group(3)}')     # Output: 6789

使用特殊字符

正则表达式包含几个特殊字符,用于更复杂的模式匹配:

  • * — 匹配前一个元素的 0 次或多次出现。
  • + — 匹配前一个元素的 1 个或多个出现。
  • ? — 匹配前一个元素的 0 次或 1 次出现。
  • {n} — 与前一个元素的 n 个出现次数完全匹配。
  • | — 匹配其之前的模式或之后的模式。

示例

以下是一些使用特殊字符的示例:

# Match a pattern with 0 or more occurrences
result = re.findall(r'\d*', '123 abc 456')
print(result)  # Output: ['123', '', '', '456']

# Match a pattern with 1 or more occurrences
result = re.findall(r'\d+', 'There are 24 apples and 3 oranges.')
print(result)  # Output: ['24', '3']

使用正则表达式替换文本

re.sub() 函数用于替换字符串中与模式匹配的部分:

text = 'The rain in Spain falls mainly in the plain.'

# Replace 'Spain' with 'France'
new_text = re.sub(r'Spain', 'France', text)
print(new_text)  # Output: The rain in France falls mainly in the plain.

结论

正则表达式是 Python 中用于模式匹配和文本处理的强大工具。使用 re 模块,您可以根据复杂模式搜索、匹配和替换文本。通过了解基本语法和特殊字符,您可以利用正则表达式有效地处理各种文本处理任务。