正则表达式捕获组(正则 捕获组)

## 正则表达式捕获组### 简介捕获组是正则表达式中非常强大的功能,允许你提取匹配字符串中的特定部分。它们通过使用括号 `()` 来定义,括号内的模式匹配到的内容会被捕获并存储起来,供后续使用。### 捕获组的作用1.

提取信息:

从文本中提取特定模式的子字符串。 2.

替换文本:

使用捕获组的内容替换匹配的文本。 3.

验证格式:

更精确地验证字符串是否符合特定格式。### 捕获组的类型1.

编号捕获组:

- 默认情况下,每个左括号 `(` 会创建一个新的编号捕获组,从 1 开始编号。- 可以使用 `\1`, `\2`, ... 来引用捕获到的内容。- 例如:正则表达式 `(\d{4})-(\d{2})-(\d{2})` 可以捕获日期中的年、月、日。 2.

命名捕获组:

- 语法: `(?pattern)` - 可以使用捕获组的名称来引用捕获到的内容。- 优点:代码可读性更强,尤其在多个捕获组的情况下。- 例如:`(?\d{4})-(?\d{2})-(?\d{2})` 3.

非捕获组:

- 语法: `(?:pattern)`- 用于分组和匹配模式,但不会捕获匹配的内容。- 提高效率:减少不必要的捕获,提升性能。- 例如:`(?:\d{4}-)?\d{2}-\d{2}` 可以匹配带或不带年份的日期。### 捕获组的应用#### 1. 提取信息```python import retext = "My phone number is 123-456-7890." match = re.search(r"(\d{3})-(\d{3})-(\d{4})", text)if match:area_code = match.group(1)print(f"Area code: {area_code}") # 输出 Area code: 123 ```#### 2. 替换文本```python import retext = "John Doe, Jane Doe" new_text = re.sub(r"(\w+)\s+(\w+)", r"\2 \1", text)print(f"Original text: {text}") # 输出 Original text: John Doe, Jane Doe print(f"New text: {new_text}") # 输出 New text: Doe John, Doe Jane ```#### 3. 验证格式```python import redef validate_date(date_string):pattern = r"^(?:19|20)\d{2}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$"match = re.match(pattern, date_string)return bool(match)print(validate_date("2023-04-10")) # 输出 True print(validate_date("2023-14-10")) # 输出 False ```### 总结捕获组是正则表达式中强大且灵活的功能,能够帮助你更有效地处理字符串。 了解不同类型的捕获组及其应用场景,可以让你在文本处理任务中游刃有余。

正则表达式捕获组

简介捕获组是正则表达式中非常强大的功能,允许你提取匹配字符串中的特定部分。它们通过使用括号 `()` 来定义,括号内的模式匹配到的内容会被捕获并存储起来,供后续使用。

捕获组的作用1. **提取信息:** 从文本中提取特定模式的子字符串。 2. **替换文本:** 使用捕获组的内容替换匹配的文本。 3. **验证格式:** 更精确地验证字符串是否符合特定格式。

捕获组的类型1. **编号捕获组:** - 默认情况下,每个左括号 `(` 会创建一个新的编号捕获组,从 1 开始编号。- 可以使用 `\1`, `\2`, ... 来引用捕获到的内容。- 例如:正则表达式 `(\d{4})-(\d{2})-(\d{2})` 可以捕获日期中的年、月、日。 2. **命名捕获组:** - 语法: `(?pattern)` - 可以使用捕获组的名称来引用捕获到的内容。- 优点:代码可读性更强,尤其在多个捕获组的情况下。- 例如:`(?\d{4})-(?\d{2})-(?\d{2})` 3. **非捕获组:** - 语法: `(?:pattern)`- 用于分组和匹配模式,但不会捕获匹配的内容。- 提高效率:减少不必要的捕获,提升性能。- 例如:`(?:\d{4}-)?\d{2}-\d{2}` 可以匹配带或不带年份的日期。

捕获组的应用

1. 提取信息```python import retext = "My phone number is 123-456-7890." match = re.search(r"(\d{3})-(\d{3})-(\d{4})", text)if match:area_code = match.group(1)print(f"Area code: {area_code}")

输出 Area code: 123 ```

2. 替换文本```python import retext = "John Doe, Jane Doe" new_text = re.sub(r"(\w+)\s+(\w+)", r"\2 \1", text)print(f"Original text: {text}")

输出 Original text: John Doe, Jane Doe print(f"New text: {new_text}")

输出 New text: Doe John, Doe Jane ```

3. 验证格式```python import redef validate_date(date_string):pattern = r"^(?:19|20)\d{2}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$"match = re.match(pattern, date_string)return bool(match)print(validate_date("2023-04-10"))

输出 True print(validate_date("2023-14-10"))

输出 False ```

总结捕获组是正则表达式中强大且灵活的功能,能够帮助你更有效地处理字符串。 了解不同类型的捕获组及其应用场景,可以让你在文本处理任务中游刃有余。

标签列表