Django 用户认证 用户 邮箱登录 邮箱注册 ORM or,and,not form.py FORM ModelForm Paginator 分页 HTMl JQuery 定位元素 ajax django切片 restfulapi 跨域 Ubantu Python Mysql Scrapy 爬虫 导出 Python读写 Pycharm 破解 session re sqlit3 生成式 其他 Prism 富文本 CSS Nginx 部署 请求头 抓包 协议 selenium Ubuntu 宝塔 AI Comfy-ui ollama dify open-webui Git docker
常用的正则表达式转义字符
张建行 2024年12月9日 21:54 65 文章标签: 爬虫 re

正则表达式是一种强大的文本处理工具,它通过定义一系列的模式来匹配、查找和替换字符串中的特定内容。以下是对正则表达式的基础知识、常用元字符及其应用的详细解析。

正则表达式基础知识

元字符(Metacharacters)

元字符是正则表达式中的特殊字符,它们具有特定的含义,而不是代表它们本身的字符。

\d:匹配任意一个数字(0-9)。

  • 示例:在字符串 “The year is 2024” 中,\d 可以匹配 ‘2’, ‘0’, ‘2’, 和 ‘4’。

\w:匹配任意一个字母、数字或下划线(a-zA-Z0-9_)。

  • 示例:在字符串 “Var_1” 中,\w 可以匹配 ‘V’, ‘a’, ‘r’, ‘1’。

.:匹配除换行符以外的任意一个字符。

  • 示例:在字符串 “a.c” 中,a.c 可以匹配 ‘abc’,但不能匹配 ‘ac’(因为没有字符在 ‘a’ 和 ‘c’ 之间)。

*:匹配前面的字符0次或多次。

  • 示例:在字符串 “abbc” 中,a* 可以匹配 ‘’(空字符串),‘a’, ‘aa’。

?:匹配前面的字符0次或1次。

  • 示例:在字符串 “abbc” 中,a? 可以匹配 ‘’(空字符串)和 ‘a’。

+:匹配前面的字符1次或多次。

  • 示例:在字符串 “abbc” 中,a+ 可以匹配 ‘a’ 和 ‘aa’。

^:匹配字符串的开始。

  • 示例:在字符串 “abc” 中,^a 可以匹配 ‘a’,因为 ‘a’ 是字符串的开始。

$:匹配字符串的结束。

  • 示例:在字符串 “abc” 中,c$ 可以匹配 ‘c’,因为 ‘c’ 是字符串的结束。

|:逻辑“或”操作,匹配两个或多个分支中的任意一个。

  • 示例:在字符串 “abc” 中,a|b 可以匹配 ‘a’ 或 ‘b’。

():标记子表达式的开始和结束位置,可以用于分组和捕获匹配的文本。

  • 示例:在字符串 “abcabc” 中,(abc)+ 可以匹配 ‘abcabc’,因为 ‘abc’ 重复了一次。

[]:匹配方括号内的任意一个字符(字符类)。

  • 示例:在字符串 “a1b2c3” 中,[abc] 可以匹配 ‘a’, ‘b’, 或 ‘c’。

[^]:匹配不在方括号内的任意一个字符。

  • 示例:在字符串 “a1b2c3” 中,[^abc] 可以匹配 ‘1’, ‘2’, 或 ‘3’。

量词(Quantifiers)

量词用于指定匹配的次数。

{n}:匹配前面的字符恰好n次。

  • 示例:在字符串 “aabbcc” 中,a{2} 可以匹配 ‘aa’。

{n,}:匹配前面的字符至少n次。

  • 示例:在字符串 “aaaab” 中,a{3,} 可以匹配 ‘aaaa’。

{n,m}:匹配前面的字符至少n次,但不超过m次。

  • 示例:在字符串 “aaaab” 中,a{2,4} 可以匹配 ‘aaa’。

贪婪与非贪婪模式

正则表达式默认是贪婪模式,它会尽可能多地匹配字符。

贪婪模式:.* 会匹配尽可能多的字符。

  • 示例:在字符串 “abc123def” 中,.* 会匹配 ‘abc123def’。

非贪婪模式:.*? 会匹配尽可能少的字符。

  • 示例:在字符串 “abc123def” 中,a.*?d 会匹配 ‘abc123d’。

实践示例

以下是一些正则表达式的实践示例:

  1. 验证电子邮件地址:
    • 正则表达式:^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$
    • 示例:`example@email