python零碎知识(1):有关正则表达式
2015-05-10 15:13
260 查看
一、前言
推荐几篇相关博文
1.http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
2.http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html
可以学习参考
二、我对python正则表达式的认识regular expression (RegExp)
三、罗马字母
在罗马数字中,利用7个不同字母进行重复或者组合来表达各式各样的数字。
构造罗马数字的一些规则:
1.字符是叠加的。
I表示1, II表示2, 而III表示3.
VI 表示 6 (字面上为逐字符相加, “5 加
1”), VII 表示
7, VIII 表示 8.
2.能够被10整除的字符(I,
X, C, 和 M)至多可以重复三次.
对于4, 你则需要利用下一个最大的能够被5整除的字符进行减操作得到,你不能把4 表示成
IIII(因为能够被10整除的字符(I,X,C,M)最多能重复三次);而应表示为
IV (比“5小 1”)。数字40写成XL (比50小10),41 写成
XLI,42 写成 XLII,
43 写成 XLIII;而 44 写成
XLIV (比50 小10, 然后比5小1).
类似的,对于数字 9,你必须利用下一个能够被10整除的字符进行减操作得到:
8 表示为 VIII, 而 9 则表示为
IX (比10 小1), 而不是
VIIII (因为字符I 不能连续重复四次)。数字90 表示为
XC, 900 表示为
CM.
3.被5整除的字符不能重复(V,L,D)
数字10 常表示为X, 而从来不用VV来表示。数字100常表示为C, 也从来不表示为
LL.
4.罗马数字经常从高位到低位书写,从左到右阅读,因此不同顺序的字符意义大不相同
DC 表示 600; 而CD 是一个完全不同的数字(为400, 也就是比500 小100).
CI 表示 101; 而IC 甚至不是一个合法的罗马字母(因为你不能直接从数字100减去1; 比需要写成XCIX, 意思是 比100 小10,
然后加上数字9,也就是比 10小1的数字).
四、利用罗马字母来校验
1.目标:校验任意一个字符串是否为一个有效的罗马数字
2.思想:
(1).一定要熟练正则表达式,才能对于下面的校验熟练掌握
(2).根据罗马字母的匹配规则,由于罗马数字经常是从高位到低位书写,我们从高位开始:千位。对于大于、等于1000的数字,千位有一系列的字符
M 表示。
3.流程:
Python通过re模块提供对正则表达式的支持。使用re的一般步骤是先将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作。
4.用途:很广泛、很强大
还是引用 Dive Into Python上的实例吧,加深下理解。谁叫我还是菜鸟呢!
NO1:校验千位
分析:
1.模式分析:
(1):^表示仅仅在一个字符串的开始匹配其后的字符串内容。如果没有这个字符,这个模式将匹配出现在字符串任意位置上的
M,而这并不是你想要的。你想确认的是:字符串中是否出现字符M,如果出现,则必须是在字符串的开始。
(2):M? 可选的匹配单个字符M,由于他重复出现三次,你可以在一行中匹配0次到3次字符M。
(3):$ 字符限制模式只能够在一个字符串的结尾匹配。当和模式开头的字符^结合使用时,这意味着模式必须匹配整个串,并且在在字符M的前后都不能够出现其他的任意字符。
2.功能分析:
(1):re 模块的本质是一个search 函数,该函数有两个参数,一个是正则表达式(pattern),一个是字符串 ('M'),函数试图匹配正则表达式。如果发现一个匹配,search 函数返回一个拥有多种方法可以描述这个匹配的对象,如果没有发现匹配,search
函数返回一个None, 一个Python 空值(null value)。你此刻关注的唯一事情,就是模式是否匹配上,可以利用
search函数的返回值弄清这个事实。字符串'M' 匹配上这个正则表达式,因为第一个可选的M匹配上,而第二个和第三个M 被忽略掉了。
(2):'MM' 匹配上是因为第一和第二个可选的M匹配上,而忽略掉第三个M。
(3):'MMM' 匹配上因为三个M 都匹配上了
(4):'MMMM' 没有匹配上。因为所有的三个M都匹配上,但是正则表达式还有字符串尾部的限制 (由于字符
$), 然而字符串没有结束(因为还有第四个M字符), 因此
search 函数返回一个None.
(5):有趣的是,一个空字符串也能够匹配这个正则表达式,因为所有的字符
M 都是可选的。
NO2.检验百位数
……头疼,正在思考中
推荐几篇相关博文
1.http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
2.http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html
可以学习参考
二、我对python正则表达式的认识regular expression (RegExp)
1 ^:匹配字符串的开始. 2 $:匹配字符串的结尾。 3 \b:匹配一个单词的边界 4 \d:匹配任意数字 5 \D:匹配任意非数字字符 6 x?:匹配一个可选的x字符(换句话说,它匹配1次或者0次x 字符)。 7 x*:匹配0次或者多次x字符 8 x+:匹配1次或者多次x字符。 9 x{n,m}: 匹配x字符,至少n次,至多m次 10 {a|b|c}:要么匹配a,要么匹配b,要么匹配c。 11 (x):一般情况下表示一个记忆组(remembered group).
你可以利用re.search函数返回对象的groups()函数获取它的值。
三、罗马字母
在罗马数字中,利用7个不同字母进行重复或者组合来表达各式各样的数字。
1 I = 1 2 V = 5 3 X = 10 4 L = 50 5 C = 100 6 D = 500 7 M = 1000
构造罗马数字的一些规则:
1.字符是叠加的。
I表示1, II表示2, 而III表示3.
VI 表示 6 (字面上为逐字符相加, “5 加
1”), VII 表示
7, VIII 表示 8.
2.能够被10整除的字符(I,
X, C, 和 M)至多可以重复三次.
对于4, 你则需要利用下一个最大的能够被5整除的字符进行减操作得到,你不能把4 表示成
IIII(因为能够被10整除的字符(I,X,C,M)最多能重复三次);而应表示为
IV (比“5小 1”)。数字40写成XL (比50小10),41 写成
XLI,42 写成 XLII,
43 写成 XLIII;而 44 写成
XLIV (比50 小10, 然后比5小1).
类似的,对于数字 9,你必须利用下一个能够被10整除的字符进行减操作得到:
8 表示为 VIII, 而 9 则表示为
IX (比10 小1), 而不是
VIIII (因为字符I 不能连续重复四次)。数字90 表示为
XC, 900 表示为
CM.
3.被5整除的字符不能重复(V,L,D)
数字10 常表示为X, 而从来不用VV来表示。数字100常表示为C, 也从来不表示为
LL.
4.罗马数字经常从高位到低位书写,从左到右阅读,因此不同顺序的字符意义大不相同
DC 表示 600; 而CD 是一个完全不同的数字(为400, 也就是比500 小100).
CI 表示 101; 而IC 甚至不是一个合法的罗马字母(因为你不能直接从数字100减去1; 比需要写成XCIX, 意思是 比100 小10,
然后加上数字9,也就是比 10小1的数字).
四、利用罗马字母来校验
1.目标:校验任意一个字符串是否为一个有效的罗马数字
2.思想:
(1).一定要熟练正则表达式,才能对于下面的校验熟练掌握
(2).根据罗马字母的匹配规则,由于罗马数字经常是从高位到低位书写,我们从高位开始:千位。对于大于、等于1000的数字,千位有一系列的字符
M 表示。
3.流程:
Python通过re模块提供对正则表达式的支持。使用re的一般步骤是先将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作。
4.用途:很广泛、很强大
还是引用 Dive Into Python上的实例吧,加深下理解。谁叫我还是菜鸟呢!
NO1:校验千位
1 import re 2 pattern='^M?M?M?$' 3 #语法:re.search(pattern, string, flags) 4 print re.search(pattern, 'M') 5 print re.search(pattern,'MM') 6 print re.search(pattern,'MMM') 7 print re.search(pattern,'MMMM') 8 print re.search(pattern,'') 9 输出如下: 10 <_sre.SRE_Match object at 0x00AEDC60> 11 <_sre.SRE_Match object at 0x00AEDC60> 12 <_sre.SRE_Match object at 0x00AEDC60> 13 None 14 <_sre.SRE_Match object at 0x00AEDC60>
分析:
1.模式分析:
(1):^表示仅仅在一个字符串的开始匹配其后的字符串内容。如果没有这个字符,这个模式将匹配出现在字符串任意位置上的
M,而这并不是你想要的。你想确认的是:字符串中是否出现字符M,如果出现,则必须是在字符串的开始。
(2):M? 可选的匹配单个字符M,由于他重复出现三次,你可以在一行中匹配0次到3次字符M。
(3):$ 字符限制模式只能够在一个字符串的结尾匹配。当和模式开头的字符^结合使用时,这意味着模式必须匹配整个串,并且在在字符M的前后都不能够出现其他的任意字符。
2.功能分析:
(1):re 模块的本质是一个search 函数,该函数有两个参数,一个是正则表达式(pattern),一个是字符串 ('M'),函数试图匹配正则表达式。如果发现一个匹配,search 函数返回一个拥有多种方法可以描述这个匹配的对象,如果没有发现匹配,search
函数返回一个None, 一个Python 空值(null value)。你此刻关注的唯一事情,就是模式是否匹配上,可以利用
search函数的返回值弄清这个事实。字符串'M' 匹配上这个正则表达式,因为第一个可选的M匹配上,而第二个和第三个M 被忽略掉了。
(2):'MM' 匹配上是因为第一和第二个可选的M匹配上,而忽略掉第三个M。
(3):'MMM' 匹配上因为三个M 都匹配上了
(4):'MMMM' 没有匹配上。因为所有的三个M都匹配上,但是正则表达式还有字符串尾部的限制 (由于字符
$), 然而字符串没有结束(因为还有第四个M字符), 因此
search 函数返回一个None.
(5):有趣的是,一个空字符串也能够匹配这个正则表达式,因为所有的字符
M 都是可选的。
NO2.检验百位数
……头疼,正在思考中
相关文章推荐
- python零碎知识(5):有关正则表达式
- python爬虫入门(1) 基础知识 ; 正则表达式 Re 模块
- Python编程 Python中有关正则表达式 setdefaultencoding
- Python正则表达式的基础知识回顾
- Python零基础入门二十四之正则表达式知识补充
- python爬虫基础知识(二)--正则表达式
- python基础知识——正则表达式,
- Python正则表达式知识汇总
- Python 正则表达式 Re模块的一些简单入门知识
- VII Python(6)基础知识(re正则表达式、MySQLdb模块)
- 关于python的基础知识11--正则表达式
- python中,有关正则表达式re函数:compile、match、search、findall
- Python中有关正则表达式
- Python爬虫知识(2)——正则表达式复习
- Python基础知识:re正则表达式
- Python基础知识3:re正则表达式
- python正则表达式--基本用法和函数(理论知识)
- Python学习笔记之正则表达式基本知识
- 有关正则表达式基础知识
- Python正则表达式基础知识总结