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

目录




前言:在文本查找方面,你可能很熟悉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 陕西

相关推荐

05-27 14:57
西北大学 golang
强大的社畜在走神:27届真不用急,可以搞点项目、竞赛再沉淀沉淀,我大二的时候还在天天打游戏呢
投递华为等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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