Loading... 这节课我们来讲解一下上节课布置的三道课后习题。三道不少,算是一个阶段性小测验吧。希望大家都能顺利做出来。 **1. 分类产品标签** 我们有以下的这一段源文本: ```bash PQ92819x TKSNC82J4A AJEIZMFWEL271827 RFTJ9WZMS28 CIW92KJSD PQ38400X pq38323X RFT8291912 AJSKWJS83928 PQ99999XX RFT00000009 RRFTKMZSDDS4 CSE101WOWZA RFTK9DMG828 BAWDKMJDW8291242 PQ12341X ``` 请把源文本复制到你的正则表达式测试工具比如精易编程助手中,然后完成如下匹配任务: (1)请匹配出所有以“PQ”开头,接着是 5 个数字(00000 到 99999),然后以大写或者小写“X”结尾的行。允许有子匹配文本(用上小括号)。 **提示:答案有 3 个。** (2)请匹配出所有以“RFT”开头,接着是 7 个大写字母或者数字的任意组合,最后以一个数字结尾的行。 **提示:答案有 3 个。** (3)请匹配出所有以“A”开头,接着是 7 到 10 个大写字母,接着是 3 到 7 个数字结尾的行。 **提示:答案有 1 个。** **解析:** 这道题通过分析,我们需要使用多行匹配来完成,记得在测试工具的右上角勾选上全局,区分大小写以及多行模式。 (1) `^PQ\d{5}(x|X)$` 这种写法会有子匹配文本,如果想不出现子匹配文本,我们可以写成这样: `^PQ\d{5}[xX]$` 使用中括号来替代竖线选择符。 最后的结果: ![zhengze9-1-1.jpg](http://static.fox-9.com/uploads/2021/08/06/zhengze9-1-1.jpg!webp) (2) `^RFT[0-9A-Z]{7}\d$` 最后的结果: ![zhengze9-1-2.jpg](http://static.fox-9.com/uploads/2021/08/06/zhengze9-1-2.jpg!webp) (3) `^A[A-Z]{7,10}\d{3,7}$` 最后的结果: ![zhengze9-1-3.jpg](http://static.fox-9.com/uploads/2021/08/06/zhengze9-1-3.jpg!webp) --- **2. 找出所有符合条件的课程名** 我们有以下的这一段源文本: ```bash CSE 101 AMS 310 PHY 132 Wrt 102 CSE114 ECO330 CHNN 101 Ams 261 MAT 200 WRT101 frn1012 che 299 C-S-E 114 C.S..E215 AMS-211 B,,,I.-O 255 -ECO 102 ``` 其中每一行都是一个课程名。请按下列要求找出所有有效课程名写法的行。课程首先是以三个大写或小写字母开头,接着是一个可有可无的空格,然后是三个数字结尾,这是一个有效的课程名。所以,理想状态下,每一个课程大概都是类似“CSE 101”或者“Phy 132”这样的写法。但是在实际情况下,有的时候因为人工误输入的原因,造成在字母与字母之间,可能会有 `,``-``.` 这几种字符的出现而且出现次数不定,位置不定。但是即使这样我们还是认为这些课程名属于有效的课程名。 **本题答案提示:共有 12 个。** **解析:** 这道题我们的难点在于课程名字母间可能穿插几个特殊符号,而且次数不定。特殊符号我们可以用字符集 [] 来包含,次数不定可以用星号来表示可以不出现也可以出现多次。特别注意的是,连字符和点号是特殊字符,需要在它们前面使用转义字符 `\` 才能匹配它们自身,关于转义字符的使用我们会在后面的课程中详细讲解。 以下是答案: `^[a-zA-Z][\.\-,]*[a-zA-Z][\.\-,]*[a-zA-Z][ ]?\d{3}$` 最后的结果: ![zhengze9-1-4.jpg](http://static.fox-9.com/uploads/2021/08/06/zhengze9-1-4.jpg!webp) ```bash 1 CSE 101 2 AMS 310 3 PHY 132 4 Wrt 102 5 CSE114 6 ECO330 7 Ams 261 8 WRT101 9 che 299 10 C-S-E 114 11 C.S..E215 12 B,,,I.-O 255 ``` --- **3. 信用卡归类** 我们有以下的这一段源文本: ```bash 4175007282312321 5025007282312321 62250072875454563 30428763928172 417500728231987 50550072823127458 62250072875441254563 30628763928172 ``` 在这些信用卡信息中,不同的卡号代表不同的信用卡公司品牌,请完成以下任务,找出符合某个公司品牌的信用卡卡号: (1)ALPHA 公司的信用卡卡号为 16 位数字,都是以 4026, 417500 或 4405 开头的。 (2)BETA 公司的信用卡卡号为 16 位数字,卡号开头数字范围为 500-549。 (3)GAMMA 公司的信用卡卡号为 16-19 位数字,卡号以数字 62 开头。 (4)OMEGA 公司的信用卡卡号为 14 位数字,卡号开头数字范围为 300-305。 **解析:** 这道题的关键难点在于卡号的位数确定,所以我们位数不能定义错误。 (1) `^4026\d{12}|417500\d{10}|4405\d{12}$` 最后的结果: ```bash 4175007282312321 ``` (2) `^5[0-4]\d{14}$` 最后的结果: ```bash 5025007282312321 ``` (3) `^62\d{14,17}$` 最后的结果: ```bash 62250072875454563 ``` (4) `^30[0-5]\d{11}$` 最后的结果: ```bash 30428763928172 ``` --- 以下是我们的视频教程: **在线观看:** http://v.youku.com/v_show/id_XMjc0NDM3NTg3Ng==.html **高清源文件下载:** <div class="hideContent">该部分仅登录用户可见</div> 感谢大家的收看,我们下期再见! 最后修改:2021 年 08 月 06 日 © 允许规范转载 赞 赠人玫瑰,手留余香