当然要明白正则表达式一时半会肯定是不能完全记住的,需要有不断地训练以及记忆,今天先初步学习一下
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,一个特别的日子。
进阶技巧
懒惰匹配与贪婪匹配
正则表达式默认采用贪婪匹配模式,即尽可能多地匹配字符。懒惰匹配(非贪婪匹配)则相反,尽可能少地匹配字符。通过在量词后添加 ?
来实现懒惰匹配,如 *?
、+?
、??
。
前瞻与后顾断言
前瞻断言用于判断某个位置之后(或之前)的字符是否符合特定模式,但不包括这些字符在内。
- 正向前瞻
(?=...)
- 负向前瞻
(?!...)
- 正向后顾
(?<=...)
(注意:并非所有正则引擎都支持) - 负向后顾
(?<!...)
(同样,并非所有正则引擎都支持)