Python核心编程——Chapter15

正则表达式在脚本语言里是最重要的一部分,这部分的题目真的不容怠慢。

开始这部分的题目的解答!

15.1识别下列字符串:bat,bit,but,hat,hit和hut。
>>> import re
>>> pattern='[bh][aiu]t'
>>> word='batsasasasa'
>>> m=re.search(pattern,word)
>>> if m is not None:
...     m.group()
... 
'bat'
15.2.匹配用一个空格分隔的任意一对单词,比如名和性。
pattern='[A-Za-z][a-z]+ [A-Za-z][a-z]'
15.3.匹配用一个逗号和一个空格分开的一个单词和一个字母。
>>> import re
>>> pattern='([A-Z]\.)+ ?[A-Z][a-z]+'
>>> s1='J.R. Smith'
>>> s2='J.R.Smith'
>>> s3='T. Ford'
>>> re.match(pattern,s1).group()
'J.R. Smith'
>>> re.match(pattern,s2).group()
'J.R.Smith'
>>> re.match(pattern,s3).group()
'T. Ford'
15.4.匹配所有合法的Python标识符

所谓合法的Python标识符:首字母只能是下划线或字母,然后之后的字符可以是字母,数字或下划线。

>>> pattern='[a-zA-Z_][\w_]+'
15.5.匹配美国的街道名字地址,如:1180 Bordeaux Drive ,3120 De la Cruz Boulevard。
>>> patter='\d+ [A-Za-z ]+'
15.6.匹配以“www."开头,以”.com"作结尾的Web域名。
>>> pattern='w{3}[.\w]+.com'

附加题:支持其他顶级域名:

>>> pattern='w{3}[.\w]+'
 15.7.匹配全体Python整型的字符串表示形式的集合。
>>> pattern='\d+[Ll]?'
15.8.匹配全体Python长整型字符串表示形式的集合。
>>> pattern='\d+[Ll]'
15.9.匹配全体Python浮点型的字符串表示形式的集合。
>>> pattern='\d+\.\d+'
15.10.匹配全体Python复数的字符串表示形式的集合。
>>> pattern='\d+\.?\d+\+\d+\.?\d+j'
15.11.匹配所有合法的电子邮件地址
>>> pattern='\w+@[\w.]+'
15.13.往type()提取类型的名字
>>> pattern=''
>>> re.match(pattern,"<type 'int'>").group()
"<type 'int'>"
>>> re.match(pattern,"<type 'int'>").group(1)
'int'
 15.16.将gendata.py的内容输出到文件当中。
#!/usr/bin/env python

from random import randint,choice
from string import lowercase
from sys import maxint
from time import ctime

doms = ('com','edu','net','org','gov')
g = open('/home/dzhwen/456.txt','a+')

for i in range(randint(5,10)):
    dtint = randint(0,maxint-1)
    dtstr = ctime(dtint)
    shorter = randint(4,7)

    em =''
    for j in range(shorter):
        em += choice(lowercase)
        
    longer = randint(shorter,12)
    dn=''
    for j in range(longer):
        dn += choice(lowercase)

    word=dtstr+'::'+em+'@'+dn+'.'+choice(doms)+'::'+str(dtint)+'-'+str(shorter)+'-'+str(longer)+'\n'
    g.write(word)
15.19.提取出每行中完整的时间戳字段。
#!/usr/bin/env python

import re

f = open('/home/dzhwen/456.txt','r')

pattern = '(.+?)::.+'

for eachLine in f:
    m = re.match(pattern,eachLine)
    print m.group(1)
15.20.提取出每行中完整的电子邮件地址。
#!/usr/bin/env python

import re

f = open('/home/dzhwen/456.txt','r')

pattern = '.+::(\w+@\w+.\w+)::.+'

for eachLine in f:
    m = re.match(pattern,eachLine)
    print m.group(1)
15.21.只提取时间戳字段中的月份。
#!/usr/bin/env python

import re

f = open('/home/dzhwen/456.txt','r')

pattern = '\w{3} (\w{3}).+'

for eachLine in f:
    m = re.match(pattern,eachLine)
    print m.group(1)
15.22.只提取时间戳字段中的年份。 
#!/usr/bin/env python

import re

f = open('/home/dzhwen/456.txt','r')

pattern = '.+?(\d{4}).+'

for eachLine in f:
    m = re.match(pattern,eachLine)
    print m.group(1)
 15.23.只提取出时间戳字段中的时间值。
#!/usr/bin/env python

import re

f = open('/home/dzhwen/456.txt','r')

pattern = '.+(\d{2}:\d{2}:\d{2}).+'

for eachLine in f:
    m = re.match(pattern,eachLine)
    print m.group(1)
    
 15.25.只从电子邮件地址中提取出登录名和域名。(二者分别提取)
#!/usr/bin/env python

import re

f = open('/home/dzhwen/456.txt','r')

pattern = '.+::(\w+)?@(.+)?::.+'

for eachLine in f:
    m = re.match(pattern,eachLine)
    print m.group(1),m.group(2)
 15.26.将每行中的电子邮件地址替换为你自己的电子邮件地址。
#!/usr/bin/env python
#-*-coding:utf-8-*-

import re

f = open('/home/dzhwen/456.txt','r')

pattern = '.+::(.+)?::.+'

for eachLine in f:
    m = re.match(pattern,eachLine)
    address = raw_input('请输入你自己的电子邮件:')
    print re.subn(m.group(1),address,eachLine)

有趣的题目基本只有这些,请多多指教!

转载于:https://www.cnblogs.com/sysu-blackbear/p/3604021.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值