Python正则表达式:提取关键信息并输出结果

Python 正则表达式:提取关键信息并输出结果

正则表达式(Regular Expression,简称 regex 或 regexp)是一种强大的文本处理工具,它允许你使用特定的模式来匹配、搜索和操作字符串。在 Python 中,re 模块提供了对正则表达式的全面支持,使得提取关键信息变得高效且灵活。本文将深入探讨 Python 正则表达式的使用方法,涵盖从基础语法到高级技巧,并辅以丰富的示例,帮助你掌握如何利用正则表达式提取关键信息并输出结果。

一、正则表达式基础

  1. 字符匹配:

  2. . 匹配除换行符以外的任意单个字符。

  3. [] 匹配字符集中的任意单个字符,例如 [abc] 匹配 a、b 或 c。
  4. [^] 匹配不在字符集中的任意单个字符,例如 [^abc] 匹配除 a、b、c 以外的任意单个字符。
  5. \d 匹配数字,等价于 [0-9]
  6. \D 匹配非数字,等价于 [^0-9]
  7. \w 匹配字母数字和下划线,等价于 [a-zA-Z0-9_]
  8. \W 匹配非字母数字和下划线,等价于 [^a-zA-Z0-9_]
  9. \s 匹配空白字符,包括空格、制表符、换行符等。
  10. \S 匹配非空白字符。

  11. 数量词:

  12. * 匹配前一个字符 0 次或多次。

  13. + 匹配前一个字符 1 次或多次。
  14. ? 匹配前一个字符 0 次或 1 次。
  15. {m} 匹配前一个字符 m 次。
  16. {m,n} 匹配前一个字符 m 到 n 次。
  17. {m,} 匹配前一个字符至少 m 次。

  18. 边界匹配:

  19. ^ 匹配字符串的开头。

  20. $ 匹配字符串的结尾。
  21. \b 匹配单词边界。
  22. \B 匹配非单词边界。

  23. 分组和捕获:

  24. () 用于分组和捕获匹配的子字符串。

  25. (?:) 用于分组但不捕获匹配的子字符串。

  26. 特殊字符转义:

  27. 使用 \ 转义特殊字符,例如 \.\*\+ 等。

二、Python re 模块常用函数

  1. re.compile(pattern): 编译正则表达式模式,返回一个正则表达式对象,可以提高匹配效率。
  2. re.match(pattern, string): 从字符串开头匹配,如果匹配成功则返回匹配对象,否则返回 None。
  3. re.search(pattern, string): 在字符串中搜索第一个匹配,如果匹配成功则返回匹配对象,否则返回 None。
  4. re.findall(pattern, string): 返回所有非重叠匹配的列表。
  5. re.finditer(pattern, string): 返回所有非重叠匹配的迭代器。
  6. re.sub(pattern, repl, string): 将匹配的子字符串替换为 repl。
  7. re.split(pattern, string): 使用匹配的子字符串作为分隔符分割字符串。

三、提取关键信息示例

  1. 提取邮箱地址:

```python
import re

text = "我的邮箱是 [email protected], 他的邮箱是 [email protected]."
pattern = r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Z|a-z]{2,}\b"
emails = re.findall(pattern, text)
print(emails) # 输出: ['[email protected]', '[email protected]']
```

  1. 提取 URL:

```python
import re

text = "访问我的网站 https://www.example.com 或 http://example.net."
pattern = r"https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+"
urls = re.findall(pattern, text)
print(urls) # 输出: ['https://www.example.com', 'http://example.net']
```

  1. 提取日期:

```python
import re

text = "今天是 2023-10-27,明天是 2023-10-28。"
pattern = r"\d{4}-\d{2}-\d{2}"
dates = re.findall(pattern, text)
print(dates) # 输出: ['2023-10-27', '2023-10-28']
```

  1. 提取特定标签内容:

```python
import re

html = "

这是一个段落。

这是另一个段落。

"
pattern = r"

(.*?)

"
paragraphs = re.findall(pattern, html)
print(paragraphs) # 输出: ['这是一个段落。', '这是另一个段落。']
```

  1. 使用分组捕获多个信息:

```python
import re

text = "用户 John Doe 的 ID 是 12345。"
pattern = r"用户 (\w+) (\w+) 的 ID 是 (\d+)."
match = re.search(pattern, text)
if match:
first_name = match.group(1)
last_name = match.group(2)
user_id = match.group(3)
print(f"First Name: {first_name}, Last Name: {last_name}, User ID: {user_id}")
# 输出: First Name: John, Last Name: Doe, User ID: 12345
```

四、高级技巧

  1. 非贪婪匹配: 在数量词后面添加 ? 可以实现非贪婪匹配,例如 .*? 匹配尽可能少的字符。

  2. 命名捕获组: 使用 (?P<name>...) 可以给捕获组命名,方便后续访问。

  3. 预查和后查: 使用 (?=...) (正向预查)、(?!...) (负向预查)、(?<=...) (正向后查) 和 (?<!...) (负向后查) 可以实现更复杂的匹配逻辑。

  4. 标志: re 模块提供了一些标志,例如 re.IGNORECASE (忽略大小写)、re.MULTILINE (多行匹配) 等,可以修改正则表达式的行为。

五、总结

Python 正则表达式是一个强大的工具,可以帮助你高效地提取关键信息。本文介绍了正则表达式的基础语法、re 模块常用函数以及一些高级技巧,并提供了丰富的示例。通过学习和实践,你可以灵活运用正则表达式解决各种文本处理问题。 建议你多练习,并查阅 Python 官方文档以获取更详细的信息。 掌握正则表达式将极大地提高你的编程效率,尤其是在处理文本数据时。 希望本文能帮助你更好地理解和应用 Python 正则表达式。

THE END