【卷一】正则四 |> 练习
参考:《Python核心编程(3rd)》—P39
1-1 识别后续的字符串: "bat", "bit", "but" "hat", "hit" 或者 "hut"
# coding: utf-8 # 导入re模块, re: Regex(Regular Expression) 正则表达式
import re url = "https://www.baidu.com/baidu?tn=monline_3_dg&ie=utf-8&wd=bat%E7%"
# 直接用管道符号 "|" 逐一匹配
print re.findall(r"bat|bit|but|com|hat|hit|hut", url)
1-2 匹配由单个空格分隔的任意单词对,也就是姓和名
# coding: utf-8 import re txt = "My name is D_R Adams, her name is J.K Rowling, his name is Tomas Smith!"
# 管道符号左边是匹配D_R ~和J.K ~ 这种类型的,右边是匹配Tomas Smith这种常见的名字
print re.findall(r"[A-Z].[A-Z] \w+|[A-Z]\w+ [A-Z]\w+", txt)
1-6 匹配以"www"起始且以".com"结尾的简单Web域名,选做题:
你的正则表达式也可以支持其他高级域名, 如.edu, .net 等
# coding: utf-8 import re url = "http://www.baidu.com/, http://www.google.cn/, http://www.foothill.edu" # 有多重括号时,如果只需最外面总的分组(一般用括号把我们要的分组给圈起来),那么里面的括号就要加 ?: 表示不保存该分组
print re.findall("(www(?:.+com|.+cn|.+edu))", url)
#print re.findall("www.+com|www.+cn|www.+edu", url)
1-11 匹配所有能够表示有效电子邮件地址的集合
# coding: utf-8 import re email = "QQ mailbox such as 1111@qq.com, 1234@163.com is WangYi mailbox, and google mailbox: 2222@gmail.com" for each_line in email.split(","):
a = re.findall(r"\d+@.+com", each_line)
# 用 join() 把列表转换成字符串
print "".join(a)
如果只是想把文本和邮箱分开:
# coding: utf-8
import re
email = "QQ mailbox such as 1111@qq.com, 1234@163.com is WangYi mailbox, and google mailbox: 2222@gmail.com" for each_line in email.split(","):
# 用(?= )表示按后面是 "数字+@"的情况来划分, 注意括号后边要加空格
re.split(r"(?= \d+@) ", each_line.strip())
点我
# coding: utf-8 import re string = type("Hello, world!") # str: (string)字符串
integer = type(123) # int: (integer)整数
f = type(3.14) # float: 浮点数 def PiPei(a):
# 注意,因为string, integer, f本身是type类的字符, 而不是str类的, 所以此外要转换
print re.findall(r"type '(\w+)'", str(a)) PiPei(string)
PiPei(integer)
PiPei(f)
展开
------------------------------------------------------------------------------------------------------------------------------
19-27答案参见:
正则三 之数据生成器 —> http://www.cnblogs.com/Ruby517/p/5802984.html
------------------------------------------------------------------------------------------------------------------------------
1-28 区号(三个整数集合中的第一部分和后面的连字符)是可选的,也就是说,正则表达式应当匹配 800-555-1212,也能匹配
555-1212!
# coding: utf-8 import re num1 = "555-1212"
num2 = "800-555-1212" # +表示匹配前面的字符 1 到多次,(?: )表示不保存该分组,由于我们要的是
# 一整个正则表达式匹配的内容,所以加括号的分组是不需要保存的!
print re.findall(r"(?:\d{3}-)+\d{4}", num1)
print re.findall(r"(?:\d{3}-)+\d{4}", num2)
代码
1-29 支持使用圆括号或者连字符连接的区号(更不用说是可选的内容);使正则表达式匹配 800-555-1212以及 (800) 555-1212
# coding: utf-8 import re n1 = "555-1212"
n2 = "800-555-1212"
n3 = "(800) 555-1212" # 我们要的是整个正则表达式匹配的内容,因此前2个括号括起来
# 的都是不需要的分组,所以用(?: )表示不保存该分组
# '?'表示匹配前面的字符0或1次,'+' 表示匹配前面的字符1或多次
print re.findall(r"(?:\(\d{3}\) )?(?:\d{3}-)+\d{4}", n1)
print re.findall(r"(?:\(\d+\) )?(?:\d+-)+\d+", n2)
print re.findall(r"(?:\(\d+\) )?(?:\d+-)+\d+", n3)
Click
【卷一】正则四 |> 练习的更多相关文章
- JS正则四个反斜杠的含义
我们首先来看如下代码,在浏览器中输出的是什么? // 在浏览器中输出的 console.log('\\'); // 输出 \ console.log('\\\\'); // 输出 \\ 一:js正则直 ...
- backbonejs中的模型篇(二)
一:模型标识符 每个模型都有一个用作唯一标识符的ID属性,以便在不同模型间进行区分.通过id属性我们可以直接访问模型对象当中用于标识符存放的属性,默认属性名为id,但也可以通过设置idAttribut ...
- Flask框架(二)—— 反向解析、配置信息、路由系统、模板、请求响应、闪现、session
Flask框架(二)—— 反向解析.配置信息.路由系统.模板.请求响应.闪现.session 目录 反向解析.配置信息.路由系统.模板.请求响应.闪现.session 一.反向解析 1.什么是反向解析 ...
- [Day4] Nginx Http模块二
一. POST_READ阶段 1. 用户ip在http请求中的传递? 前提:Tcp连接四元组(src ip,src port,dst ip,dst port) HTTP头部 X-Formard ...
- ES6(四) --- 正则 Number Math
想学vue了 重启ES6的学习之路 在ES5 中正则的构造器 RegExp 不支持第二个参数 ES6 做了调整 第二个参数表示正则表达式的修饰符(flag) var regex = new ...
- 大白话5分钟带你走进人工智能-第十四节过拟合解决手段L1和L2正则
第十四节过拟合解决手段L1和L2正则 第十三节中, ...
- [深入理解Android卷一全文-第四章]深入理解zygote
由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该由于纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的所有内容. ...
- 第二百六十四节,Tornado框架-基于正则的动态路由映射分页数据获取计算
Tornado框架-基于正则的动态路由映射分页数据获取计算 分页基本显示数据 第一步.设置正则路由映射配置,(r"/index/(?P<page>\d*)", inde ...
- js进阶js中支持正则的四个常用字符串函数(search march replace split)
js进阶js中支持正则的四个常用字符串函数(search march replace split) 一.总结 代码中详细四个函数的用法 search march replace split 二.js进 ...
随机推荐
- PDF在线阅读 FlexPaper 惰性加载 ;
关于PDF在线阅读问题,比较普遍的做法是转换成swf文件来浏览:由于项目需要,就用 flexpaper 来实现了下,功能比较简单:但是文件的惰性加载确实让笔者挠头了一把! 下面是笔者的方法: 采用流的 ...
- php强制下载文件并显示原始文件名
原来一直没有接触过,这几天一直在玩儿文件上传下载的东西.今天又遇到一个坑. 描述:文件上传至服务器后,如果是rar或则其他的非浏览器直接识别的格式,用户点击链接了后是可以直接就被下载下来的.那么如果上 ...
- Python数据预处理—归一化,标准化,正则化
关于数据预处理的几个概念 归一化 (Normalization): 属性缩放到一个指定的最大和最小值(通常是1-0)之间,这可以通过preprocessing.MinMaxScaler类实现. 常用的 ...
- c++中宽字节表示
1.C++语言中_T Visual C++里边定义字符串的时候,用_T来保证兼容性,VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候 ...
- UltraEdit-32文本编辑器软件 23.20.0.28 中文版
软件名称: UltraEdit-32文本编辑器软件软件语言: 简体中文授权方式: 共享软件运行环境: Win 32位/64位软件大小: 21.5MB图片预览: 软件简介:UltraEdit 是一个功能 ...
- C#中XmlSerializer的内存占用问题
被XmlSerializer掉坑里了,爬了一晚上才出来. 本来实现一个功能,从数据库中查出一堆数据(比较多,几十万,不过,是分批查出来的),查出来的数据包含了一个XML字符串,代码中对其进行序列化,一 ...
- 1张图看懂RAID功能,6张图教会配置服务器【转】
RAID 包含一组或者一个集合甚至一个阵列.使用一组磁盘结合驱动器组成 RAID 阵列或 RAID 集.将至少两个磁盘连接到一个 RAID 控制器,而成为一个逻辑卷,也可以将多个驱动器放在一个组中.一 ...
- C#拾遗(一、基本类型)
1. C#是一种块结构语言,用花括号{}分块,但是用#region和#endregion来定义可以展开和折叠的代码区域 #region 这是引用区 using System; ...... #endr ...
- pageoffice 开发笔记
开发环境:vs2015,mvc,razor pageoffice版本:Server-Version=3.2.0.1 OCX-Version=2,0,4,6 开发模式:pageofficeLink方式 ...
- iOS 解决文本(uitextfield/uitextView)在中间显示而不在顶部显示 问题
在对应的控制器中设置下面属性 self.automaticallyAdjustsScrollViewInsets = NO; 这样就好了.