速刷正则表达式一周目(上)

目录




前言:在文本查找方面,你可能很熟悉ctrlF,输入你想要查找的词。但正则表达式在此基础上更进一步,它可以通过位置、模式以及通配符等进行快速查找。本篇文章将以千字左右篇幅,带你速刷正则表达式的一些简单内容以及实战。

一、不使用正则表达式筛选电话号码

二、使用正则表达式筛选电话号码

创建正则表达式对象

 复习:

三、利用括号分组

四、用管道匹配多个分组



前言:在文本查找方面,你可能很熟悉ctrlF,输入你想要查找的词。但正则表达式在此基础上更进一步,它可以通过位置、模式以及通配符等进行快速查找。本篇文章将以千字左右篇幅,带你速刷正则表达式的一些简单内容以及实战。



一、不使用正则表达式筛选电话号码



众所周知,电话号码由三部分组成,例如:132-3233-7777,是由3位网号+4位HLR号+4位的个人代码。假定我们构建一个函数,筛选广电号段的电话号码(中国广电号段:192),有如下操作

  1. def phoneNumber(text):#1
  2. if len(text) != 11:#2
  3. return False
  4. if text[0:3] != '192':#3
  5. return False
  6. for i in range(0,11):#4
  7. if not text[i].isdecimal():#4
  8. return False
  9. return True
  10. print(phoneNumber('12345557656'))
  11. print(phoneNumber('192****3333'))

 首先#1使用def定义函数phoneNumber(),#2判断文本长度是否等于11位,若不等于,则返回False。#3遍历文本前三位,如果不等于192,则返回False,#4遍历全11位,如果不是纯数字,则返回False。

输出如下:

 可以看到相当麻烦,接下来,以正则表达式查找文本。


二、使用正则表达式筛选电话号码

  • 创建正则表达式对象

        

  1. import re
  2. phoneNumber = re.compile(r'1\d\d\d\d\d\d\d\d\d\d')
  3. mo = phoneNumber.search('My number is 175****5207')
  4. print("My phone number is " + mo.group())#变量名mo是一个通用的名称

 输出如下


 复习:

第一步:使用import re导入正则表达式模块。

第二步:用re.compile()函数创建一个Regex对象(使用原始字符串)。

第三步:想Regex对象的search()方法传入想查找的字符串。它返回一个Match对象。

第四步:调用Match对象的group()方法,返回实际匹配文本的字符串。


三、利用括号分组

  1. import re
  2. phoneNumber = re.compile(r'(\d\d\d)-(\d\d\d\d-\d\d\d\d)')
  3. mo = phoneNumber.search('My phone number is 175-4340-5207')
  4. mo.group(1)
  5. mo.group(0)
  6. mo.group(2)

输出如下

 如果需要一次获取全部分组,使用groups()


四、用管道匹配多个分组

字符|被称为管道,希望匹配许多表达式中的一个时,可以有如下操作

  1. color = re.compile(r'red|blue')
  2. mo1 = color.search('red and blue')
  3. mo1.group()
  4. mo2 = color.search('blue and red')
  5. mo2.group()

如果希望匹配'Batman'、'Batmobile'、'Batcopter'

  1. bat = re.compile(r'Bat(man|mobile|copter)')
  2. mo = bat.search('Batmobile lost a wheel')
  3. mo.group()
  4. mo.group(1)

dio用mo.group()返回完全匹配的文本'Batmobile',而mo.group(1)只是返回了第一个括号分组内的文本'mobile'

如果需要匹配真正的管道字符,就要用到转义字符。



全部评论
每次我都不会正则啊
点赞 回复 分享
发布于 2022-08-30 21:20 陕西

相关推荐

牛至超人:把哈工大,再加大加粗,看见闪闪发光的哈工大字样,面试官直接流口水
投递字节跳动等公司6个岗位
点赞 评论 收藏
分享
想干测开的tomca...:让我来压力你!!!: 这份简历看着“技术词堆得满”,实则是“虚胖没干货”,槽点一抓一大把: 1. **项目描述是“技术名词报菜名”,没半分自己的实际价值** 不管是IntelliDoc还是人人探店,全是堆Redis、Elasticsearch、RAG这些时髦词,但你到底干了啥?“基于Redis Bitmap管理分片”是你写了核心逻辑还是只调用了API?“QPS提升至1500”是你独立压测优化的,还是团队成果你蹭着写?全程没“我负责XX模块”“解决了XX具体问题”,纯把技术文档里的术语扒下来凑字数,看着像“知道名词但没实际动手”的实习生抄的。 2. **短项目塞满超纲技术点,可信度直接***** IntelliDoc就干了5个月,又是RAG又是大模型流式响应又是RBAC权限,这堆活儿正经团队分工干都得小半年,你一个后端开发5个月能吃透这么多?明显是把能想到的技术全往里面塞,生怕别人知道你实际只做了个文件上传——这种“技术堆砌式造假”,面试官一眼就能看出水分。 3. **技能栏是“模糊词混子集合”,没半点硬核度** “熟悉HashMap底层”“了解JVM内存模型”——“熟悉”是能手写扩容逻辑?“了解”是能排查GC问题?全是模棱两可的词,既没对应项目里的实践,也没体现深度,等于白写;项目里用了Elasticsearch的KNN检索,技能栏里提都没提具体掌握程度,明显是“用过但不懂”的硬凑。 4. **教育背景和自我评价全是“无效信息垃圾”** GPA前10%这么好的牌,只列“Java程序设计”这种基础课,分布式、微服务这些后端核心课提都不提,白瞎了专业优势;自我评价那堆“积极认真、细心负责”,是从招聘网站抄的模板吧?没有任何和项目挂钩的具体事例,比如“解决过XX bug”“优化过XX性能”,纯废话,看完等于没看。 总结:这简历是“技术名词缝合怪+自我感动式凑数”,看着像“背了后端技术栈名词的应届生”,实则没干货、没重点、没可信度——面试官扫30秒就会丢一边,因为连“你能干嘛”都没说清楚。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务