Python学习第五天
来源:互联网 发布:淘宝客批量申请定向 编辑:程序博客网 时间:2024/05/16 04:48
# 正则表达式
# 5.2 案例研究:街道地址
s='100 NORTH MAIN ROAD'
s=s.replace('ROAD','RD.') # 1、字符串替换
print (s)
s='100 NORTH BROAD ROAD'
s=s.replace('ROAD','RD.',1)
print (s)
s[:-4]+s[-4:].replace('OAD','E') # 1、字符串替换
import re
re.sub('ROAD$','RD',s) # 2、字符串替换
'''
参考网址:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
正则表达式:
1.表示字符串开始:^
2.表示字符串结束:$
3. \b :意思是“在右边必须有一个分隔符”
4. 'r':字符串中没有任何字符需要转义
5. '?'表示匹配前面字符0次或1次
'''
s='100 BROAD'
print (re.sub('ROAD$','RD.',s))
print (re.sub('\\bROAD$','RD.',s))
print (re.sub(r'\bROAD$','RD.',s))
s='100 BROAD ROAD APT.3'
print (re.sub(r'\bROAD$','RD.',s))
print (re.sub(r'\bROAD\b','RD.',s))
# 5.3 研究罗马数字 规则蛋疼啊
'''
I = 1
V = 5
X = 10
L = 50
C = 100
D = 500
M = 1000
'''
# 5.3.1 检查千位数
print ("检查千位数")
pattern='^M?M?M?$'
print (re.search(pattern,'M'))
print (re.search(pattern,'MM'))
print (re.search(pattern,'MMM'))
print (re.search(pattern,'MMMM'))
print (re.search(pattern,'')) # 匹配0次
# 等价
pattern='^M{0,3}$'
print (re.search(pattern,'M'))
print (re.search(pattern,'MM'))
print (re.search(pattern,'MMM'))
print (re.search(pattern,'MMMM'))
print (re.search(pattern,''))
# 5.3.2 检查百位数
print ("检查百位数")
'''
100 = C 200 = CC
300 = CCC 400 = CD
500 = D 600 = DC
700 = DCC 800 = DCCC
900 = CM
'''
'''
可能的匹配模式:
CM
CD
可能有0到3个字符C(0个表示千位为0)。
D紧跟在0到3个字符C的后面
'''
pattern='^M?M?M?(CM|CD|D?C?C?C?)$'
print (re.search(pattern,'MCM'))
print (re.search(pattern,'MD'))
print (re.search(pattern,'MMMCCC'))
print (re.search(pattern,'MCMC'))
print (re.search(pattern,'MCD'))
print (re.search(pattern,''))
print (re.search(pattern,'DCCC'))
# 等价
pattern='^M{0,3}(CM|CD|D{0,1}C{0,3})$'
print (re.search(pattern,'MCM'))
print (re.search(pattern,'MD'))
print (re.search(pattern,'MMMCCC'))
print (re.search(pattern,'MCMC'))
print (re.search(pattern,'MCD'))
print (re.search(pattern,''))
print (re.search(pattern,'DCCC'))
# 检查十位和个位
print ("检查十位和个位")
pattern='^M{0,3}(CM|CD|D{0,1}C{0,3})(XC|XL|L{0,1}X{0,3})$'
print (re.search(pattern,'MCMXL'))
print (re.search(pattern,'MCML'))
print (re.search(pattern,'MCMLX'))
print (re.search(pattern,'MCMLXXX'))
print (re.search(pattern,'MCMLXXXX'))
# 5.5 松散正则表达式
'''
需要传递 re.VERBOSE
1、空白符被忽略。空格、制表符和回车在正则表达式中并不会匹配空格、制表符、回车。如果你想在正则表达式中匹配他们,可以在前
面加一个\来转义。
2、注释信息被忽略。松散正字表达式中的注释和python代码中的一样,都是以#开头直到行尾。它可以在多行正则表达式中增加注释信
息,这就避免了在python代码中的多行注释。他们的工作方式是一样的。
'''
pattern = '''
^ # 字符串开始
M{0,3} # 千位
(CM|CD|D{0,1}C{0,3}) # 百位
(XC|XL|L{0,1}X{0,3}) # 十位
(IX|IV|V?I{0,3}) # 个位
$ # 结束符
'''
print ("松散正则表达式")
print (re.search(pattern,'M',re.VERBOSE)) # re.VERBOSE表示使用松散正则表达式
print (re.search(pattern,'MCMLXXXIX',re.VERBOSE))
print (re.search(pattern,'MMMDCCCLXXXVIII',re.VERBOSE))
print (re.search(pattern,'M')) # 没有 NONE
# 5.6 案例研究:解析电话号码
'''假设可接受的电话号码格式:
800‐555‐1212
800 555 1212
800.555.1212
(800) 555‐1212
1‐800‐555‐1212
800‐555‐1212‐1234
800‐555‐1212x1234
800‐555‐1212 ext. 1234
work 1‐(800) 555.1212 #1234
'''
phonePattern =re.compile(r'^(\d{3})‐(\d{3})‐(\d{4})$') # \d 代表任意的数字 0~9,{3}代表我要打三个
print(phonePattern.search('800‐555‐1212'))
phonePattern =re.compile(r'^(\d{3})\D+(\d{3})\D+(\d{4})\D+(\d+)$') # \D 非数字字符,+ 匹配前面字符1次或更多次, \D+ 表示1个以上非数字字符
print(phonePattern.search('800‐555‐1212 #1234'))
phonePattern =re.compile(r'^(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$') # \D 非数字字符,* 匹配前面字符任意次, \D+ 表示任意个非数字字符
print(phonePattern.search('80055512121234'))
print(phonePattern.search('800.555.1212.1234'))
print(phonePattern.search('8005.551.2121.234'))
phonePattern =re.compile(r'(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$') # 不限制开始的位置
print(phonePattern.search('aaaa 80055512121234'))
print(phonePattern.search('work 1‐(800) 555.1212 #1234'))
'''
^ 匹配字符串开始位置。
$ 匹配字符串结束位置。
\b 匹配一个单词边界。
\d 匹配一个数字。
\D 匹配一个任意的非数字字符。
x? 匹配可选的x字符。换句话说,就是0个或者1个x字符。
x* 匹配0个或更多的x。
x+ 匹配1个或者更多x。
x{n,m} 匹配n到m个x,至少n个,不能超过m个。
(a|b|c) 匹配单独的任意一个a或者b或者c。
(x) 这是一个组,它会记忆它匹配到的字符串。你可以用re.search返回的匹配对象的groups()函数来获取到匹配的值
打完收工!!!
'''
# 5.2 案例研究:街道地址
s='100 NORTH MAIN ROAD'
s=s.replace('ROAD','RD.') # 1、字符串替换
print (s)
s='100 NORTH BROAD ROAD'
s=s.replace('ROAD','RD.',1)
print (s)
s[:-4]+s[-4:].replace('OAD','E') # 1、字符串替换
import re
re.sub('ROAD$','RD',s) # 2、字符串替换
'''
参考网址:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
正则表达式:
1.表示字符串开始:^
2.表示字符串结束:$
3. \b :意思是“在右边必须有一个分隔符”
4. 'r':字符串中没有任何字符需要转义
5. '?'表示匹配前面字符0次或1次
'''
s='100 BROAD'
print (re.sub('ROAD$','RD.',s))
print (re.sub('\\bROAD$','RD.',s))
print (re.sub(r'\bROAD$','RD.',s))
s='100 BROAD ROAD APT.3'
print (re.sub(r'\bROAD$','RD.',s))
print (re.sub(r'\bROAD\b','RD.',s))
# 5.3 研究罗马数字 规则蛋疼啊
'''
I = 1
V = 5
X = 10
L = 50
C = 100
D = 500
M = 1000
'''
# 5.3.1 检查千位数
print ("检查千位数")
pattern='^M?M?M?$'
print (re.search(pattern,'M'))
print (re.search(pattern,'MM'))
print (re.search(pattern,'MMM'))
print (re.search(pattern,'MMMM'))
print (re.search(pattern,'')) # 匹配0次
# 等价
pattern='^M{0,3}$'
print (re.search(pattern,'M'))
print (re.search(pattern,'MM'))
print (re.search(pattern,'MMM'))
print (re.search(pattern,'MMMM'))
print (re.search(pattern,''))
# 5.3.2 检查百位数
print ("检查百位数")
'''
100 = C 200 = CC
300 = CCC 400 = CD
500 = D 600 = DC
700 = DCC 800 = DCCC
900 = CM
'''
'''
可能的匹配模式:
CM
CD
可能有0到3个字符C(0个表示千位为0)。
D紧跟在0到3个字符C的后面
'''
pattern='^M?M?M?(CM|CD|D?C?C?C?)$'
print (re.search(pattern,'MCM'))
print (re.search(pattern,'MD'))
print (re.search(pattern,'MMMCCC'))
print (re.search(pattern,'MCMC'))
print (re.search(pattern,'MCD'))
print (re.search(pattern,''))
print (re.search(pattern,'DCCC'))
# 等价
pattern='^M{0,3}(CM|CD|D{0,1}C{0,3})$'
print (re.search(pattern,'MCM'))
print (re.search(pattern,'MD'))
print (re.search(pattern,'MMMCCC'))
print (re.search(pattern,'MCMC'))
print (re.search(pattern,'MCD'))
print (re.search(pattern,''))
print (re.search(pattern,'DCCC'))
# 检查十位和个位
print ("检查十位和个位")
pattern='^M{0,3}(CM|CD|D{0,1}C{0,3})(XC|XL|L{0,1}X{0,3})$'
print (re.search(pattern,'MCMXL'))
print (re.search(pattern,'MCML'))
print (re.search(pattern,'MCMLX'))
print (re.search(pattern,'MCMLXXX'))
print (re.search(pattern,'MCMLXXXX'))
# 5.5 松散正则表达式
'''
需要传递 re.VERBOSE
1、空白符被忽略。空格、制表符和回车在正则表达式中并不会匹配空格、制表符、回车。如果你想在正则表达式中匹配他们,可以在前
面加一个\来转义。
2、注释信息被忽略。松散正字表达式中的注释和python代码中的一样,都是以#开头直到行尾。它可以在多行正则表达式中增加注释信
息,这就避免了在python代码中的多行注释。他们的工作方式是一样的。
'''
pattern = '''
^ # 字符串开始
M{0,3} # 千位
(CM|CD|D{0,1}C{0,3}) # 百位
(XC|XL|L{0,1}X{0,3}) # 十位
(IX|IV|V?I{0,3}) # 个位
$ # 结束符
'''
print ("松散正则表达式")
print (re.search(pattern,'M',re.VERBOSE)) # re.VERBOSE表示使用松散正则表达式
print (re.search(pattern,'MCMLXXXIX',re.VERBOSE))
print (re.search(pattern,'MMMDCCCLXXXVIII',re.VERBOSE))
print (re.search(pattern,'M')) # 没有 NONE
# 5.6 案例研究:解析电话号码
'''假设可接受的电话号码格式:
800‐555‐1212
800 555 1212
800.555.1212
(800) 555‐1212
1‐800‐555‐1212
800‐555‐1212‐1234
800‐555‐1212x1234
800‐555‐1212 ext. 1234
work 1‐(800) 555.1212 #1234
'''
phonePattern =re.compile(r'^(\d{3})‐(\d{3})‐(\d{4})$') # \d 代表任意的数字 0~9,{3}代表我要打三个
print(phonePattern.search('800‐555‐1212'))
phonePattern =re.compile(r'^(\d{3})\D+(\d{3})\D+(\d{4})\D+(\d+)$') # \D 非数字字符,+ 匹配前面字符1次或更多次, \D+ 表示1个以上非数字字符
print(phonePattern.search('800‐555‐1212 #1234'))
phonePattern =re.compile(r'^(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$') # \D 非数字字符,* 匹配前面字符任意次, \D+ 表示任意个非数字字符
print(phonePattern.search('80055512121234'))
print(phonePattern.search('800.555.1212.1234'))
print(phonePattern.search('8005.551.2121.234'))
phonePattern =re.compile(r'(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$') # 不限制开始的位置
print(phonePattern.search('aaaa 80055512121234'))
print(phonePattern.search('work 1‐(800) 555.1212 #1234'))
'''
^ 匹配字符串开始位置。
$ 匹配字符串结束位置。
\b 匹配一个单词边界。
\d 匹配一个数字。
\D 匹配一个任意的非数字字符。
x? 匹配可选的x字符。换句话说,就是0个或者1个x字符。
x* 匹配0个或更多的x。
x+ 匹配1个或者更多x。
x{n,m} 匹配n到m个x,至少n个,不能超过m个。
(a|b|c) 匹配单独的任意一个a或者b或者c。
(x) 这是一个组,它会记忆它匹配到的字符串。你可以用re.search返回的匹配对象的groups()函数来获取到匹配的值
打完收工!!!
'''
0 0
- Python学习第五天
- 学习Python第五天
- Python学习第五天
- 第五天学习python
- python学习---第五天
- Python快速学习第五天
- 学习python的第五天
- python爬虫学习第五天
- Python学习日记 第五天
- Codecademy网学习Python第五天
- Python:第五天
- python第五天
- Python第五天
- Python(基础)第五天
- 初学Python第五天
- COBOL学习第五天
- 学习JAVA第五天
- 程序学习第五天
- Apache Hadoop 入门教程
- 【69.77%】【codeforces 723A】The New Year: Meeting Friends
- 登录后跳转到登录前页面
- android中.9图的编辑
- leetcode---Gas Station---动规
- Python学习第五天
- POJ2135 Farm Tour(最小费用最大流裸题)
- HDOJ 5540 Secrete Master Plan(qwb铜牌题 用%进行环的旋转)
- What is Native Client?
- 基于 openssl 生成用于 SSL 和 TLS 的数字证书
- Java + 面向接口interface代码实现(计算三角形、圆形的面积)
- LeetCode: Reverse Integer
- spirgmvc+ajaxfileupload上传文件
- activity的四种启动模式区别_launchmode图文详解