Python中的正则表达式是通过re
模块支持的,这是一个用于处理正则表达式的内置库。以下是如何使用re
模块以及一些代码示例。
基本用法
导入模块:
import re
编译正则表达式:
pattern = re.compile(r'\d+') # r'\d+' 表示匹配一个或多个数字
搜索字符串:
match = pattern.search('Hello 123 world!') if match: print('Found:', match.group())
遍历所有匹配:
for num in pattern.findall('123 abc 456 def 789'): print(num)
替换文本:
new_str = pattern.sub('XXX', 'The numbers are 123 and 456') print(new_str)
分割字符串:
parts = re.split(r'\W+', 'Hello, how are you?') print(parts)
进阶用法
使用正则表达式匹配多个组:
phone_pattern = re.compile(r'(\d{3})-(\d{3})-(\d{4})') match = phone_pattern.match('123-456-7890') if match: print(match.group(1), match.group(2), match.group(3))
使用正则表达式进行贪婪匹配:
text = 'abc 123 xyz 456' print(re.findall(r'\d+', text)) # 匹配所有数字
懒惰匹配(非贪婪匹配):
html = '<div>123</div><div>456</div>' tags = re.findall(r'<div>(.*?)</div>', html) # 懒惰匹配,每个div标签内的内容 print(tags)
使用正则表达式检查字符串是否符合特定模式:
if re.fullmatch(r'\d{4}-\d{2}-\d{2}', '2023-08-08'): print('Valid date')
使用正则表达式进行模式替换,包含复杂替换逻辑:
def add_prefix(match): return 'NUM_' + match.group(0) new_text = re.sub(r'(\d+)', add_prefix, 'Find 123 and 456') print(new_text)
使用正则表达式处理Unicode和特殊符号:
text = 'Special characters: © ® ™' special_chars = re.findall(r'[\u00a9\u00ae\u2122]', text) print(special_chars)
使用正则表达式进行模式匹配并执行操作:
emails = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', text) print(emails)
使用正则表达式进行模式搜索,直到首次匹配:
email = re.search(r'\S+@\S+', text) if email: print('Found email:', email.group())
注意事项
- 正则表达式中的特殊字符需要使用反斜杠
\
进行转义。 - 字面量字符串(raw string,前面带
r
)在正则表达式中很常见,以避免对反斜杠进行转义。 - 使用
re.I
标志进行不区分大小写的匹配。