正则表达式是一种强大的文本处理工具,用于在字符串中查找、替换和提取符合特定模式的字符或文本片段。在这个笔记中,作者douzujun详细介绍了Python中的四个主要正则表达式函数:re.search(), re.match(), re.split(), 和 re.compile(),以及它们各自的用法和区别。
1. **re.search()**:这个函数搜索整个输入字符串,返回第一个匹配正则表达式的第一个位置。例如,`re.findall(r'\b\d{3}\b', '110234123435567')`返回的结果是['110', '234', '355'],因为它找到三个连续的三位数字。而在'abd110234123435567'中,只匹配到了'234'和'355',因为它们与正则表达式中的`\b\d{3}\b`(匹配三位数字边界)相符。
2. **re.match()**:相较于re.search,re.match只检查字符串的开头是否匹配正则表达式。如果匹配,则返回一个匹配对象;如果不匹配,返回None。它通常用于验证字符串的格式,如邮箱地址、电话号码等。
3. **re.findall()**:此函数返回所有匹配正则表达式的非重叠部分,不考虑顺序。例中`\b\d{3}\b`在两个不同的字符串中的应用,显示出它能提取出所有符合条件的三位数字。
4. **re.split()**:用于根据正则表达式分割字符串,返回一个列表,每个元素是原字符串中匹配正则表达式的一个部分。例如,使用`\b\d{3}\b`作为分隔符,可以将电话号码分开。
5. **re.finditer()**:与findall类似,但它返回一个迭代器,每次迭代返回一个Match对象,表示一次匹配,而不是一个包含所有匹配的列表。
6. **re.sub()**:用于替换字符串中所有匹配正则表达式的子串,可以指定替换后的字符串。这对于格式化文本或数据清洗非常有用。
7. **re.compile()**:这是一个编译函数,接受一个正则表达式字符串,并返回一个Pattern对象,可以重复使用这个对象进行多次匹配操作,提高效率。例如,`pattern = re.compile(r'\b\d{3}\b')`,然后可以多次调用pattern.search()或pattern.findall()。
8. **re.match对象**:当re.match成功匹配时,返回的是一个Match对象,提供了访问匹配信息的方法,如group()、start()和end()等。
9. **贪婪匹配与最小匹配**:在正则表达式中,贪婪匹配默认会尽可能多地匹配字符,而最小匹配则尽可能少地匹配。可以通过改变量词后面加上?来实现最小匹配,如`'\d{3,}'`将匹配至少三个数字,而`'\d{3}?`将只匹配三个数字或更少。
通过学习这些函数,你可以更好地理解和应用正则表达式来处理各种文本处理任务,提高编程效率。