## 第八章 网络编程 ### 8.1 为什么要有正则表达式 - 匹配字符串 - 一个人的电话号码 - 一个人的身份证号 - 一个机器的ip地址 - 表单验证 - 验证用户输入的信息是否正确 - 银行卡号 - 爬虫 - 从网页源码中获取一些链接、重要数据 - 正则规则(元字符,量词) - 第一条规则:本身是哪一个字符 ,就匹配字符串中的哪一个字符 - 第二规则:字符串[字符串1字符串2],一个字符串组就代表匹配一个字符,只要这个字符出现在字符组里,那么就说明这个字符能匹配上 - 字符组中海可以使用范围 - 所有的范围都必须遵循ascii码从下到大来指定 - [0-9] [a-z] [A-Z] ### 8.2 元字符: - \d 表示所有的字数 - \w 表示大小写字符、数字、下划线 - \s 表示空白、空格、换行符、制表符 - \t 匹配制表符 - \n 匹配换行符 - \D 表示所有的非数字 - \W 表示除数字字符下划线之外的所有字符 - \S 表示非空白 - . 表示除了换行符之外的任意内容 - [ ]字符组:只要在中括号内的所有字符都是符合规则的字符 - [^ ]非字符组:只要在中括号内的所有字符都是不符合规则的字符 - ^ 表示一个字符的开始 - $ 表示一个字符的结束 - | 表示"或",注意,如果两规则有重叠部分,总是长得在前面,短的在后面 - ()表示分组,给一部分正规则为一组,|这个符号的作用域就可以缩小了 - [\d\D] [\w\W] [\s\S] 匹配一切字符 | 元字符 | | | | | | ------ | ---- | ---- | --------- | -------- | | \d | \w | \s | \t(table) | \n(next) | | \D | \W | \S | | | | . | | | | | | [ ] | [^ ] | | | | | ^ | $ | | | | | \| | () | | | | ### 8.3 量词 - {n} 表示只能出现n次 - {n,} 表示至少出现n次 - {n,m}表示至少出现n次,至多出现m次 - ?表示匹配0次或者1次,表示可有可无 但是只能有一个,比如小数点 - +表示匹配1次多着或者多次 - *表示匹配0次或者多次,表示可有可无,但是有可以有多个,比如小数点后n位 默认贪婪匹配,总是在符合量词条件的范围内尽量多匹配 \d[7,12] 非贪婪匹配:惰性匹配,总是匹配符合条件范围内尽量小的字符串 元字符 量词?x:表示按照元字符规则在量词范围内匹配,一旦遇到x就停止,例如:.*?x 匹配任意的内容任意多次遇到x就立即停止 ```python #身份证号 #15位 全数字 首位不为0 #18位,前17位全是数字 首位不为0 最后一位可能是x和数字 [1-9](\d{16}[\dx]|\d[14]) [1-9]\d{14}(\d{2}[\dx])? ```