十分钟让你彻底明白正则表达式
当然要明白正则表达式一时半会肯定是不能完全记住的,需要有不断地训练以及记忆,今天先初步学习一下
1. 什么是正则表达式?
正则表达式是一种用于描述字符串搜索模式的特殊语法。它由普通字符(如a到z的字母)和特殊字符(元字符)组成,能够匹配符合特定规则的字符串集合。
2. 元字符初探
.:匹配除换行符以外的任意单个字符。^:匹配输入字符串的开始位置。$:匹配输入字符串的结束位置。*:匹配前面的子表达式零次或多次。+:匹配前面的子表达式一次或多次。?:匹配前面的子表达式零次或一次。
3. 字符集与特殊字符
[ ]:字符集合,匹配集合中的任意字符。例如,[abc]匹配 "a"、"b" 或 "c"。[^ ]:否定字符集合,匹配不在集合中的任意字符。\d:匹配数字字符,等价于[0-9]。\s:匹配任何空白字符,如空格、制表符等。
4. 分组与捕获
圆括号 () 用于将多个字符组合成一个子表达式,并可以捕获匹配的文本供后续引用。例如,(abc)+ 匹配一个或多个连续的 "abc"。
实战演练
示例1:验证电子邮件地址
电子邮件地址的正则表达式可以非常复杂,但我们可以简化版本来演示:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
这个表达式大致匹配了“用户名@域名.后缀”的结构。
示例2:提取电话号码
假设我们要从一个文本中提取所有格式为 (xxx) xxx-xxxx 的电话号码:
\(\d{3}\) \d{3}-\d{4}
示例3:替换日期格式
将日期从 YYYY-MM-DD 格式转换为 DD/MM/YYYY:
import re text = "今天是2023-04-01,一个特别的日子。"
# 查找并替换
new_text = re.sub(r'(\d{4})-(\d{2})-(\d{2})', r'\3/\2/\1', text)
print(new_text) # 输出:今天是01/04/2023,一个特别的日子。
进阶技巧
懒惰匹配与贪婪匹配
正则表达式默认采用贪婪匹配模式,即尽可能多地匹配字符。懒惰匹配(非贪婪匹配)则相反,尽可能少地匹配字符。通过在量词后添加 ? 来实现懒惰匹配,如 *?、+?、??。
前瞻与后顾断言
前瞻断言用于判断某个位置之后(或之前)的字符是否符合特定模式,但不包括这些字符在内。
- 正向前瞻
(?=...) - 负向前瞻
(?!...) - 正向后顾
(?<=...)(注意:并非所有正则引擎都支持) - 负向后顾
(?<!...)(同样,并非所有正则引擎都支持)
