### 正则表达式知识点总结 #### 一、正则表达式基础概念 **正则表达式(Regular Expression)**是一种强大的文本处理工具,能够帮助我们实现字符串的搜索、替换等操作。它由一系列用于匹配字符串中字符组合的特殊符号组成。 #### 二、基本符号与模式 1. **`.` (点号)**:匹配任何单个字符,除了换行符。 - 示例:`a.b` 匹配 `acb` 或 `adb` 等。 2. **`^` (脱字号)**:匹配输入字符串的开始位置。 - 示例:`^a` 只匹配以 `a` 开头的字符串。 3. **`$` (美元符号)**:匹配输入字符串的结束位置。 - 示例:`b$` 只匹配以 `b` 结尾的字符串。 4. **`*` (星号)**:匹配前面的子表达式零次或多次。 - 示例:`a*` 匹配 `a` 出现零次或多次的情况。 5. **`+` (加号)**:匹配前面的子表达式一次或多次。 - 示例:`a+` 匹配 `a` 出现一次或多次的情况。 6. **`?` (问号)**:匹配前面的子表达式零次或一次。 - 示例:`a?` 匹配 `a` 出现零次或一次的情况。 7. **`{m,n}`**:匹配前面的子表达式至少 m 次,最多 n 次。 - 示例:`a{3,5}` 匹配 `a` 出现 3 到 5 次的情况。 8. **`[]` (方括号)**:匹配方括号中的任意一个字符。 - 示例:`[abc]` 匹配 `a`、`b` 或 `c`。 9. **`[^]` (非字符集合)**:匹配不在方括号中的任意一个字符。 - 示例:`[^abc]` 匹配除 `a`、`b` 和 `c` 之外的任何字符。 10. **`\d` (数字)**:匹配任何数字,等价于 `[0-9]`。 - 示例:`\d` 匹配任何数字。 11. **`\D` (非数字)**:匹配任何非数字字符。 - 示例:`\D` 匹配任何非数字字符。 12. **`\w` (字母数字)**:匹配任何字母、数字或下划线。 - 示例:`\w` 匹配任何字母、数字或下划线。 13. **`\W` (非字母数字)**:匹配任何非字母数字或非下划线字符。 - 示例:`\W` 匹配任何非字母数字或非下划线字符。 14. **`\s` (空白字符)**:匹配任何空白字符,包括空格、制表符、换页符等。 - 示例:`\s` 匹配任何空白字符。 15. **`\S` (非空白字符)**:匹配任何非空白字符。 - 示例:`\S` 匹配任何非空白字符。 16. **`\b` (单词边界)**:匹配一个单词的边界。 - 示例:`\bword\b` 匹配完整的单词 "word"。 17. **`\B` (非单词边界)**:匹配一个非单词边界的位置。 - 示例:`\Bword\B` 不会匹配完整的单词 "word",但可能匹配 "wording" 中的 "word"。 #### 三、Python中的正则表达式模块 在Python中,使用正则表达式的主要库是 `re` 库。 1. **`re.match()`**:从字符串开始处进行匹配,如果字符串开始不符合正则表达式,则匹配失败,函数返回 None。 - 示例: ```python import re result = re.match(r'\d+', '123abc') if result: print(result.group()) ``` 2. **`re.search()`**:在整个字符串中进行匹配,只要找到符合正则表达式的任意位置就会成功。 - 示例: ```python import re result = re.search(r'\d+', 'abc123xyz') if result: print(result.group()) ``` 3. **`re.findall()`**:返回字符串中所有匹配的列表。 - 示例: ```python import re matches = re.findall(r'\d+', '123abc456def') print(matches) ``` 4. **`re.sub()`**:将字符串中匹配到的部分替换为指定字符串。 - 示例: ```python import re new_string = re.sub(r'\d+', 'number', '123abc456def') print(new_string) ``` 5. **`re.split()`**:通过正则表达式匹配的分隔符来分割字符串。 - 示例: ```python import re parts = re.split(r'\d+', '123abc456def') print(parts) ``` #### 四、其他重要特性 1. **模式标志**:可以通过传递第二个参数给 `re.compile()` 或者在调用方法时设置标志来修改正则表达式的行为。 - 示例: ```python pattern = re.compile(r'\w+', re.IGNORECASE | re.UNICODE) ``` 其中 `re.IGNORECASE` 表示忽略大小写,`re.UNICODE` 表示启用 Unicode 字符集。 2. **命名捕获组**:使用 `(?P<name>...)` 来定义命名捕获组,可以使用 `group('name')` 方法获取该组的匹配结果。 - 示例: ```python import re pattern = re.compile(r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})') match = pattern.match('2023-09-20') if match: print(match.group('year')) print(match.group('month')) print(match.group('day')) ``` 3. **转义字符**:某些字符在正则表达式中有特殊含义,如果希望它们被当作普通字符匹配,则需要进行转义。 - 示例: ```python import re pattern = re.compile(r'\.') if pattern.match('.'): print("Matched") ``` 4. **模式修饰符**:如 `re.DOTALL`(`.` 匹配任何字符,包括换行符),`re.MULTILINE`(使 `^` 和 `$` 能够匹配每一行的开头和结尾)等。 - 示例: ```python import re text = "Hello\nWorld" pattern = re.compile(r'^World', re.MULTILINE) if pattern.search(text): print("Matched") ``` 5. **模式拼接**:多个正则表达式可以拼接在一起,形成更复杂的匹配模式。 - 示例: ```python import re pattern = re.compile(r'\d{3,4}-\d{6,8}') if pattern.match('1234-56789012'): print("Matched") ``` 以上是关于正则表达式的一些基础知识点和Python中的具体应用案例,通过这些知识的学习,可以帮助开发者更加高效地处理文本数据。
match 匹配
result = re.match(r'规则',目标字符串) result.group() 返回符合匹配规则的结果
如果没有匹配,返回None,有的话返回结果对象
点唯一不能匹配换行符 \n ,当匹配点的时候需要前面加上转义字符 \.
match函数第三个参数加上 re.S表示多行模式。这样点就可以匹配\n了
\d 数字0-9 也可以写成 【0-9】 [] 和 [^]的理解
\w = 0-9a-zA-Z_ word 表示数字、字符和下划线,
python2只能匹配ascii吗, python3 unicode码,所以3里面还可以匹配汉子,2只能匹配上边的字符,可以通过re.U和re.A进行切换
\s 匹配任何一个空白字符(常见http)
{}、*、+的使用 ?0次或者1次
匹配邮箱的时候由于点表示任何字符串,所以需要使用反斜杠进行转义
匹配开始和结束 ^ 和 $ match 自带^
匹配分组:
/d{3,4}-/d{6-8}$ 匹配电话号 注意贪恋匹配和$结束的区别
给需要匹配的原则添加上括号,0分组是全部匹配字符换,从左往右一次分组号从1开始
分组的引用
用法 反斜杠加分组编号
给分组起别名
?P<name> ,可以直接通过result.group('name'), 已经命名的分组,如果要引用的使用?P=name,别忘了加小括号
| 在正则中表示匹配任何一个字符传就行了
findall() sub() split()
sub(参数1,参数2,参数3,参数4)参数3字符串 参数一旧的字符串 参数二替换成新的字符换
参数3目标字符串 参数4匹配次数
思考下:如何抽取标签里面的数据或者标签里面如何使用正则
首先用3引号吧标签变成字符串,作为目标字符串,
split按照规则进行字符串的切割,并且最终返回一个列表
findall()
贪婪匹配和非贪婪匹配
方法:量词后面加上?就行了
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助