第3关:基础正则表达式--区间与区间取反
任务描述
本关任务:运用正则表达式的区间表示方法,编写一个能从文本中快速匹配到数字与不是数字字符的小程序。
相关知识
为了完成本关任务,你需要掌握:
- 正则表达式区间的表达方式;
- 正则表达式区间取反的表达方式。
本关来学习正则表达式区间与区间取反的相关知识。
1.区间
有一些常见的字符组非常大,比如,我们要匹配的是任意数字,如果依照上述代码,每次我们都需要使用[0123456789] 这种方式明显很不明智,而如果要匹配从a-z的字母,我们也这样编写代码的话,肯定会让我们崩溃。
为了适应这一点,正则表达式引擎在字符组中使用连字符(-)代表区间,所以我们匹配任意数字可以使用[0-9],所以如果我们想要匹配所有小写字母,可以写成[a-z],想要匹配所有大写字母可以写成[A-Z]。
可能我们还有个需求:匹配连字符。因为-会被正则表达式引擎理解为代表连接区间,所以这个时候我们需要对-进行转义。
示例:
a = re.findall(r'[0-9]','xxx007abc')
b = re.findall(r'[a-z]','abc001ABC')
c = re.findall(r'[A-Za-z0-9]','abc007ABC')
d = re.findall(r'[0-9\-]','0edu 007-edu')
print(a)
print(b)
print(c)
print(d)
执行结果如下:
['0', '0', '7']
['a', 'b', 'c']
['a', 'b', 'c', '0', '0', '7', 'A', 'B', 'C']
['0', '0', '0', '7', '-']
2.区间取反
到目前为止,我们定义的字符组都是由可能出现的字符定义,不过有时候我们可能希望根据不会出现的字符定义字符组,例如:匹配不包含数字的字符组。
a = re.findall(r'[^0-9]','xxx007abc')
b = re.search(r'[^0-9]','xxx007abc')
print(a)
print(b)
执行结果如下:
['x', 'x', 'x', 'a', 'b', 'c']
<re.Match object; span=(0, 1), match='x'>
可以通过在字符数组开头使用 ^ 字符实现取反操作,从而可以反转一个字符组(意味着会匹配任何指定字符之外的所有字符)。
接下来再看一个表达式:n[^e] 这意味着字符n接下来的字符是除了e之外所有的字符。
a = re.findall(r'n[^e]','final')
b = re.search(r'n[^e]','final')
c = re.findall('r[n[^e]]','Python')
print(a)
print(b)
print(c)
执行结果如下:
['na']
<re.Match object; span=(2, 4), match='na'>
[]
这里我们可以发现a和b匹配的是na,字符a因为不是e所以可以被匹配,而变量c的值为空,在这里正则表达式引擎只匹配到了字符串n的位置,而n之后没有任何可以匹配[^e]的字符了,所以这里也匹配失败。
[]
<re.Match object; span=(0, 6), match='master'>
编程要求
请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:
- 匹配数字字符信息;
- 匹配不是数字字符的信息。
测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。
测试输入:Python3 and python2.7;
预期输出:
['3', '2', '7']
['P', 'y', 't', 'h', 'o', 'n', ' ', 'a', 'n', 'd', ' ', 'p', 'y', 't', 'h', 'o', 'n', '.']
# coding=utf-8import reinput_str = input()# 1、编写获取到数字的正则,并输出匹配到的信息
########## Begin ##########
is_digit = re.findall(r'[0-9]',input_str)
print(is_digit)########## End ########### 2、编写获取到不是数字的正则,并输出匹配到的信息
########## Begin ##########
except_digit = re.findall(r'[^0-9]',input_str)
print(except_digit)
########## End ##########
第3关:基础正则表达式--区间与区间取反相关推荐
- SPOJ 7259 Light Switching (水题,区间01取反)
#include <iostream> #include <stdio.h> #include <algorithm> #define lson rt<< ...
- 几个线段树板子(区间加/区间加与乘)
一直仰慕dl能够把线段树玩出花来,所以就想手写并整理一下几个常见的线段树板子(主要是结构化得好看一些) Part Ⅰ区间加法+区间求和 洛谷P3372 基础中的基础 //luogu P3372 199 ...
- Linux学习8之Shell编程--基础正则表达式
1. 正则表达式与通配符 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配的.grep.awk.sed等命令可以支持正则表达式. 通配符是用来匹配符合条件的文件名,通配符是完全匹配的.ls. ...
- P6327 区间加区间sin和 线段树 + 数学
传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的序列aaa,有mmm次操作,每次操作分两种类型: (1)l,r,v(1)l,r,v(1)l,r,v,将al,al+1,...,ara_l ...
- 线段树(区间更改,区间查最值)模板
线段树(区间更改,区间查最值)模板 主要重在理解线段树,理解了怎么改都可以,还有以后不要直接抄模板,要写出自己想的一份代码 &代码: #include <cstdio> #incl ...
- 基础正则表达式介绍与练习
基础正则表达式介绍与练习 一.什么是正则表达式 在做文字处理或编写程序时,用到查找.替换等功能,使用正则表达式能够简单快捷的完成目标.简单而言,正则表达式通过一些特殊符号的帮助,使用户可以轻松快捷的完 ...
- 实现一个简易版的微博,包含 client 和 server 两部分,并实现四个基础功能:关注、取关、发微博、获取用户微博列表
const assert = require('assert'); const question = '实现一个简易版的微博,包含 client 和 server 两部分,并实现四个基础功能:关注.取 ...
- python基础—正则表达式即re模块
正则表达式(regular expression),就是字符匹配模式,而这个匹配规则在我们写爬虫进行数据提取,或者进行数据可视化进行数据清洗时经常用到,多样化的匹配规则在复杂的字符的情况提取数据时助我 ...
- LeetCode 57. 插入区间(合并区间+排序)(区间重叠问题汇总)
题目描述 给出一个无重叠的 ,按照区间起始端点排序的区间列表. 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间). 示例 1: 输入: interval ...
最新文章
- Mysql Cluster节点类型
- mysql数据库字符集设置
- 浅析企业网站排名低可能是哪些原因导致的呢?
- 【工具】TFT彩屏图片点阵取模工具,Img2Lcd图片取模软件,图片生成c语言头文件...
- go-ipfs-api在项目中的使用
- TODO monkey笔记,PC端执行和手机端执行
- matlab信道均衡,使用LMS算法做信道均衡时,更换信道传递函数效果很差
- 批量引号_RcoketMQ 批量发送和消息过滤
- 【codevs1079】回家
- (32)VHDL实现同步复位D触发器
- 年度影像旗舰vivo X70系列正式发布 售价3699元起
- Kotlin入门(18)利用单例对象获取时间
- 华为私密相册计算机找回密码,华为手机进入隐私空间的密码忘记了怎么办
- 保留地址就是私有地址吗?
- UG二次开发UFUN C NXOpen C++全套视频教程
- hdu 6080 度度熊保护村庄(floydS使用技巧)
- TI 参考设计 采用高分辨率位置插值的正弦/余弦编码器的接口
- 讲讲一条MySQL更新语句是怎么执行的?
- javascript 函数指针
- SpringCloud五大神兽快速入门