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

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

前言:

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

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

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


def phoneNumber(text):#1

   if len(text) != 11:#2

       return False

   if text[0:3] != '192':#3

       return False

   for i in range(0,11):#4

       if not text[i].isdecimal():#4

           return False

   return True

print(phoneNumber('12345557656'))

print(phoneNumber('19233333333'))

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


输出如下:


4e062116c2f24602a604a8abb11c51bc.png


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


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

创建正则表达式对象

     


import re

phoneNumber = re.compile(r'1\d\d\d\d\d\d\d\d\d\d')

mo = phoneNumber.search('My number is 17543405207')

print("My phone number is " + mo.group())#变量名mo是一个通用的名称

输出如下




复习:

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


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


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


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


三、利用括号分组

import re

phoneNumber = re.compile(r'(\d\d\d)-(\d\d\d\d-\d\d\d\d)')

mo = phoneNumber.search('My phone number is 175-4340-5207')

mo.group(1)

mo.group(0)

mo.group(2)

输出如下



06962364f4af40fbabf8b61873ba7cbe.png

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


四、用管道匹配多个分组

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


color = re.compile(r'red|blue')

mo1 = color.search('red and blue')

mo1.group()

mo2 = color.search('blue and red')

mo2.group()

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


bat = re.compile(r'Bat(man|mobile|copter)')

mo = bat.search('Batmobile lost a wheel')

mo.group()

mo.group(1)

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


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


目录
相关文章
|
数据库 Python
第一天内容
第一天内容
|
存储 JavaScript 前端开发
前端阿瓜每周速记(2020 第 34 周)
毕竟不是全职写文,工作生活之余,遇到自己想写的,又不想随便水一水、或只做一个搬运工,往往需要查阅大量相关知识来吸收、总结、抽离、创新,时间上太紧,难成好作。
|
机器学习/深度学习 存储 编解码
第十三周:文件
重点学习按位运算
123 0
|
缓存 搜索推荐 定位技术
|
机器学习/深度学习 人工智能 C++
C++第6周项目2 - 程序填空
课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/8748730 【题目】程序填空:按要求将缺少的代码填进去,经调试确认符合要求 a. 用指针访问对象 class A { private: int a
939 1
一周总结(十八)
基本上都是程序上的事情,周围的事情记得很少。 读Shiro源码,Shiro的Session管理,Shiro的多Realm多登陆页面。 读Mybatis源码,关于Cache的控制,Exector部分 学习了React的语法,React Nactive做了小Demo 周末看了加勒比海盗2,3.看了死侍。
一周总结(十六)
最近几周生活太类似了,想写的时候发现生活没什么变化。每天就是早上8点工作,到晚上11点钟,回来累了,点开一个视频看一会,然后睡觉,反复三个星期。 这段时间,App又完善了一些,产品方面的东西投入时间比较多,一直在进步。
|
缓存 Java 数据库连接
一周总结(十五)
每天都在优化程序,优化项目。增加一些小功能等等。好像编程机器一样。 事情 写程序,权限管理,后台优化操作,解决偶尔出现的问题。使用了阿里云的Memcache;使用Memcache代理;解决服务器偶尔出现的问题,磁盘空间被日志塞满了,无法保存session,及编辑文件;解决Mybatis-redis集成问题;研读Mybatis缓存源码。
一周总结(十四)
已经过去10天了,读书笔记还没写呢,每天确实是10点多就回去了,但是比预期的稍微晚一点,回去后基本在看看奇葩说。 事情 东西改善的地方没有很多,在做新的功能,有点慢 放假之前去老码头店吃火锅 平时听一听书,听的不多,看看奇葩说,奇葩说看了好几集。