1. 日志打印与终端颜色控制
1.1 使用 loguru 打印日志
from loguru import logger
logger.debug("调试信息")
logger.info("普通信息")
logger.warning("警告信息")
logger.error("错误信息")
logger.success("成功信息")
1.2 终端颜色控制(Colorama)
Colorama 库用于控制终端输出的颜色和样式。
- 字体颜色:Fore.RED, Fore.GREEN
- 背景颜色:Back.BLACK, Back.CYAN
- 样式:Style.BRIGHT, Style.DIM
示例:
from colorama import Fore, Back, Style
print(Fore.RED + "红色字体" + Style.RESET_ALL)
print(Back.GREEN + "绿色背景" + Style.RESET_ALL)
print(Style.BRIGHT + "高亮文本" + Style.RESET_ALL)
2. 正则表达式
2.1 基础语法与元字符
元字符 | 描述 | 示例 |
---|---|---|
. | 匹配除换行符外的任意字符 | a.c → "abc", "a1c" |
| | 逻辑或 | a|b → "a" 或 "b" |
[] | 字符集匹配 | [aeiou] → 匹配任意元音字母 |
[^] | 字符集取反 | [^0-9] → 匹配非数字字符 |
() | 分组匹配 | (ab)+ → "ab", "abab" |
\ | 转义字符 | \. → 匹配小数点 . |
2.2 预定义字符集
表达式 | 匹配内容 | 等价形式 |
---|---|---|
\d | 数字 | [0-9] |
\w | 字母/数字/下划线 | [A-Za-z0-9_] |
\s | 空白字符 | [ \t\n\r\f\v] |
\D | 非数字 | [^\d] |
\W | 非单词字符 | [^\w] |
\S | 非空白字符 | [^\s] |
2.3 重复匹配
表达式 | 描述 | 示例 |
---|---|---|
{n} | 重复n次 | a{3} → "aaa" |
{m,n} | 重复m到n次 | a{2,4} → "aa", "aaa", "aaaa" |
? | 0或1次 | a? → "" 或 "a" |
+ | 至少1次 | a+ → "a", "aaa" |
* | 0到多次 | a* → "", "a", "aaaa" |
2.4 贪婪与非贪婪模式
-
贪婪模式:默认匹配尽可能长的字符串。
- 示例:a.*b 匹配 "aabcb" 中的整个字符串。
-
非贪婪模式:使用 ? 匹配尽可能短的字符串。
- 示例:a.*?b 匹配 "aabcb" 中的 "aab" 和 "ab"。
2.5 常用正则表达式案例
- 邮箱匹配:^[\w\.-]+@[\w\.-]+\.\w+$
- IP地址匹配:^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$
- 日期格式(YYYY-MM-DD):^\d{4}-\d{2}-\d{2}$
2.6 高级功能
分组与后向引用
-
分组捕获:使用 () 分组并提取匹配内容。
import re pattern = r"(\d{4})-(\d{2})-(\d{2})" match = re.match(pattern, "2023-10-05") if match: year, month, day = match.groups() print(f"Year: {year}, Month: {month}, Day: {day}") # Year: 2023, Month: 10, Day: 05
-
后向引用:通过 \1, \2 引用分组内容。
# 匹配重复单词,如 "hello hello" pattern = r"(\b\w+\b)\s+\1" print(re.findall(pattern, "hello hello world")) # ['hello']
零宽断言(Lookahead/Lookbehind)
-
正向肯定预查 (?=...):匹配后面紧跟特定模式的位置。
# 匹配后面跟着 "px" 的数字,如 "100px" pattern = r"\d+(?=px)" print(re.findall(pattern, "200px 300em 150px")) # ['200', '150']
-
负向否定预查 (?!...):匹配后面不跟特定模式的位置。
# 匹配不以 "px" 结尾的数字,如 "200em" pattern = r"\d+(?!px)" print(re.findall(pattern, "200px 300em 150px")) # ['300']
正则表达式修饰符
修饰符 | 描述 | 示例 |
---|---|---|
re.I | 忽略大小写 | re.findall(r"apple", "Apple", re.I) → ['Apple'] |
re.M | 多行模式 | 使 ^ 和 $ 匹配每行的开头和结尾 |
re.S | 让 . 匹配包括换行符在内的所有字符 | re.findall(r"a.*b", "a\nb", re.S) → ['a\nb'] |