正则表达式是一种强大的文本模式匹配工具,在 Python 中,我们可以使用 re
模块来进行正则表达式的操作。以下是一些高级的正则表达式应用示例:
复杂的模式匹配
import re
text = "Hello, my email is example@example.com and my phone number is 123-456-7890."
email_pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
phone_pattern = r'\d{3}-\d{3}-\d{4}'
emails = re.findall(email_pattern, text)
phones = re.findall(phone_pattern, text)
print("Emails found:", emails)
print("Phones found:", phones)
在上述代码中,我们定义了两个正则表达式模式:一个用于匹配电子邮件地址,另一个用于匹配电话号码。
分组和提取
import re
text = "The price of the product is $12.99."
pattern = r'(\$\d+\.\d{2})'
match = re.search(pattern, text)
if match:
price = match.group(1)
print("Price found:", price)
这里使用了分组来提取匹配的部分。
替换操作
import re
text = "Hello, World! How are you?"
pattern = r'World'
replaced_text = re.sub(pattern, "Python", text)
print("Replaced text:", replaced_text)
通过 re.sub()
函数可以进行替换操作。
多行匹配
import re
text = """
Line 1: This is the first line.
Line 2: This is the second line.
Line 3: This is the third line.
"""
pattern = r'Line \d+'
matches = re.findall(pattern, text, re.MULTILINE)
print("Matches found:", matches)
使用 re.MULTILINE
标志可以进行多行匹配。
贪婪与非贪婪模式
import re
text = "<html><head><title>Title</title></head></html>"
pattern_greedy = r'<.*>'
pattern_nongreedy = r'<.*?>'
match_greedy = re.search(pattern_greedy, text)
match_nongreedy = re.search(pattern_nongreedy, text)
print("Greedy match:", match_greedy.group())
print("Non-greedy match:", match_nongreedy.group())
演示了贪婪模式和非贪婪模式的区别。
正则表达式的应用非常广泛,可以根据具体的需求灵活运用这些高级技巧来处理各种文本模式匹配问题。