Python正则表达式入门到精通

2024-06-25 20:14:14 浏览数 (1)

正则表达式(Regular Expression)是一种用于模式匹配和文本处理的强大工具。在 Python 中,正则表达式通过 re 模块提供支持。本文将详细介绍 Python 中如何使用正则表达式,包括基础语法、常用函数、进阶用法及实际应用示例,帮助深入理解和高效使用正则表达式。

正则表达式基础

正则表达式由普通字符和元字符组成,通过定义特定的模式来匹配字符串。

以下是一些常见的元字符及其含义:

  • .:匹配任意字符(除换行符)
  • ^:匹配字符串的开头
  • $:匹配字符串的结尾
  • *:匹配前面的字符0次或多次
  • :匹配前面的字符1次或多次
  • ?:匹配前面的字符0次或1次
  • {n}:匹配前面的字符n次
  • {n,}:匹配前面的字符至少n次
  • {n,m}:匹配前面的字符至少n次,至多m次
  • []:匹配方括号内的任意字符
  • |:匹配左边或右边的字符
  • :转义字符,用于转义特殊字符

使用 re 模块

在 Python 中使用正则表达式,首先需要导入 re 模块。re 模块提供了几个常用函数,用于执行正则表达式操作。

re.match()

re.match() 用于从字符串的开头进行匹配,如果匹配成功,返回一个 Match 对象,否则返回 None

代码语言:javascript复制
import re

pattern = r'hello'
string = 'hello world'

match = re.match(pattern, string)
if match:
    print("匹配成功:", match.group())
else:
    print("匹配失败")

re.search()

re.search() 用于在整个字符串中搜索第一次出现的匹配,如果匹配成功,返回一个 Match 对象,否则返回 None

代码语言:javascript复制
import re

pattern = r'world'
string = 'hello world'

search = re.search(pattern, string)
if search:
    print("匹配成功:", search.group())
else:
    print("匹配失败")

re.findall()

re.findall() 用于查找字符串中所有与模式匹配的子串,并以列表形式返回。

代码语言:javascript复制
import re

pattern = r'd '
string = 'hello 123 world 456'

findall = re.findall(pattern, string)
print("所有匹配项:", findall)  # 输出 ['123', '456']

re.sub()

re.sub() 用于替换字符串中所有与模式匹配的子串,并返回替换后的字符串。

代码语言:javascript复制
import re

pattern = r'd '
string = 'hello 123 world 456'
replacement = '数字'

result = re.sub(pattern, replacement, string)
print("替换结果:", result)  # 输出 'hello 数字 world 数字'

re.split()

re.split() 用于按照模式匹配的子串将字符串分割,并以列表形式返回分割结果。

代码语言:javascript复制
import re

pattern = r's '
string = 'hello world 2023'

split = re.split(pattern, string)
print("分割结果:", split)  # 输出 ['hello', 'world', '2023']

正则表达式进阶

分组和反向引用

使用圆括号 () 可以将模式中的一部分括起来,形成一个分组。分组可以通过序号进行反向引用,分组序号从1开始。

代码语言:javascript复制
import re

pattern = r'(hello) (world)'
string = 'hello world'

match = re.match(pattern, string)
if match:
    print("整体匹配:", match.group(0))  # 输出 'hello world'
    print("第一个分组:", match.group(1))  # 输出 'hello'
    print("第二个分组:", match.group(2))  # 输出 'world'

非贪婪匹配

默认情况下,正则表达式是贪婪的,会尽可能多地匹配字符。可以在量词后面加上 ? 实现非贪婪匹配。

代码语言:javascript复制
import re

pattern = r'<.*?>'
string = '<div>hello</div><span>world</span>'

findall = re.findall(pattern, string)
print("非贪婪匹配结果:", findall)  # 输出 ['<div>', '<span>']

编译正则表达式

可以使用 re.compile() 将正则表达式编译成一个正则表达式对象,以提高匹配效率,尤其是在需要重复使用同一个模式时。

代码语言:javascript复制
import re

pattern = re.compile(r'd ')
string = 'hello 123 world 456'

findall = pattern.findall(string)
print("编译模式查找结果:", findall)  # 输出 ['123', '456']

实际应用示例

验证电子邮件地址

正则表达式可以用于验证电子邮件地址是否有效。

代码语言:javascript复制
import re

pattern = r'^[a-zA-Z0-9_. -] @[a-zA-Z0-9-] .[a-zA-Z0-9-.] $'
email = 'example@example.com'

if re.match(pattern, email):
    print("有效的电子邮件地址")
else:
    print("无效的电子邮件地址")

提取网页中的所有 URL

通过正则表达式,可以从网页 HTML 中提取所有 URL。

代码语言:javascript复制
import re

html = '''
<html>
<head><title>Test</title></head>
<body>
<a href="http://example.com">Example</a>
<a href="https://www.test.com">Test</a>
</body>
</html>
'''

pattern = r'href="(http[s]?://[^"] )"'
urls = re.findall(pattern, html)
print("提取的 URL:", urls)  # 输出 ['http://example.com', 'https://www.test.com']

替换敏感词汇

正则表达式可以用于替换文本中的敏感词汇。

代码语言:javascript复制
import re

text = 'This is a bad word.'
pattern = r'bbadb'
replacement = '***'

clean_text = re.sub(pattern, replacement, text)
print("替换后的文本:", clean_text)  # 输出 'This is a *** word.'

分割复杂字符串

可以使用正则表达式按照复杂的模式分割字符串,例如分割带有多种分隔符的字符串。

代码语言:javascript复制
import re

string = 'apple,banana;orange|grape'
pattern = r'[;,|]'

split = re.split(pattern, string)
print("复杂分割结果:", split)  # 输出 ['apple', 'banana', 'orange', 'grape']

总结

本文详细介绍了 Python 中正则表达式的基础知识、常用函数、进阶用法及其实际应用示例。正则表达式是处理字符串和文本数据的强大工具,通过掌握正则表达式,可以高效解决许多复杂的文本匹配和处理问题。希望本文对大家理解和使用正则表达式有所帮助。

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

0 人点赞