正则表达式的强大之处是他提供了很多特殊符号和字符, 使用它们正则表达式就更加的强大和灵活.
这些特殊符号和字符我们称之为元字符.
表一:一般符号
| 符号 | 描述 |
|---|---|
| 字面量 | 匹配文本字符串的字面值 |
| . | 匹配任意字符(除 \n 之外) |
| ^ | 匹配字符串的起始部分 |
| $ | 匹配字符串的终止部分 |
| [abc] | 匹配a 或者 b 或者 c, 只匹配单一字符 |
| [a-d] | 匹配 a 到 z 之间的任一字符 |
| [0-9] | 匹配0-9之间的任一字符 |
| [^abc] | 不匹配 abc 任一字符 |
| [^a-z] | 不匹配 a-z 之间的任一字符 |
表二:特殊符号
| 特殊符号 | 描述 |
|---|---|
| \d | 匹配任何的十进制数字([0-9]) |
| \D | 匹配非数字(与\d相反) |
| \w | 匹配数字字母下划线([a-zA-Z0-9_]) |
| \W | 与\w相反 |
| \b | 匹配任何单词边界 |
| \B | 与\b 相反 |
| \c | 匹配特殊字符. 比如: . 匹配. _ 匹配_ 其实就是使用\作为转义字符用而已. |
表三:数量词
| 数量词 | 描述 |
|---|---|
| * | 匹配前面的0个或多个字符 |
| ? | 匹配0个或1个 |
| + | 匹配1个或多个 |
| {M} | 匹配正好 M 个, M是个数字 |
| {M,} | 匹配至少 M 个 |
| {M,N} | 匹配 M个-N个 |
择一匹配符号(|)
表示择一匹配的管道符(|), 表示一个"从多个模式中选择其一的操作". 它用于分割不公的正则表达式
at|home 匹配的字符串: at, home
r2de|c3po 匹配的字符串: r2de, c3pro
bat|bet|bit 匹配的字符串: bat, bet, bit
使用这个符号, 增强了正则表达式的灵活性. 择一匹配有的时候也称之为并(union)或者(logical OR)
分组()
使用()可以对正则表达式进行分组, 则在匹配对象中可以获取到匹配到的子组的字符串.
贪婪匹配模式
在用到数量词的匹配时, 默认的是贪婪模式.
贪婪模式的意思是说, 匹配的时候, 尽量多匹配, 不行在慢慢的减少匹配
import re
reg = "\d{2,4}"
result = re.match(reg, "12345abc") # 贪婪模式, 尽量多的匹配, 所以能匹配 4 个数字
print(result.group())

懒惰匹配模式
懒惰匹配模式是正好和贪婪模式相对的一种模式.
懒惰匹配模式是尽量的少匹配, 不行再慢慢的去增加匹配的个数.
启用懒惰模式只需要在数量词的后面添加?即可.
import re
reg = "\d{2,4}?" # 懒惰模式, 会尽量的少匹配
result = re.match(reg, "12345abc")
print(result.group())
