python 16 days

python 16 days

常用模块

正则:

 re模块是一个和正则表达式相关的模块

正则表达式和python没关系

正则表达式--->str:

1,监测字符串是否符合要求

2,从大段的文字中找到符合要求的内容

number = input('你的名字')
if number.isdigit() and len(number)==11  \
    and number.startswith('13'):
    print('是合法的手机号')
else:
    pass
例题展示
你的名字
结果展示
转换
'\\n' --> '\n'
'\\\\n' --> '\\n'
r'\\n'
r'\n'

re模块

三中最基础的查找方法
findall search match

findall查找:
pattern正则表达式, string待匹配的字符串, flags=0
ret = re.findall('\d+','eva123egon4yuan567')
print(ret)  # ['123', '4', '567']
例题展示
['123', '4', '567']
结果展示

 

search查找:

ret2 = re.search('\d+','eva123egon4yuan567')
print(ret2) # 不会直接返回结果,而是返回第一个匹配的变量
print(ret2.group()) # 使用这个变量.group()得到返回的结果
ret3 = re.search('\d+','eva')
例题展示
<_sre.SRE_Match object; span=(3, 6), match='123'>
123
结果展示

 

match查找:

ret4 = re.match('\d+','321eva123egon4yuan567')
print(ret4) # 不会直接返回结果,而是在正则表达式的开始加上一个^
print(ret4.group()) # 不会直接返回结果,而是返回第一个匹配的变量
例题展示
<_sre.SRE_Match object; span=(0, 3), match='321'>
321
结果展示

 

1,'alex27egon18yuan40',需求,把这串代码里的名字用正则表达式出来。

ret = re.split('\d+','alex27egon18yuan40')
print(ret)
例题展示
['alex', 'egon', 'yuan', '']
结果展示

 

节省时间:

obj = re.compile('\d{3}')  #将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字
# # 正则表达式 --> python可以理解的 -->执行
ret = obj.search('abc123eeee') #正则表达式对象调用search,参数为待匹配的字符串
print(ret.group())  #结果 : 123
例题展示
123
结果展示

 

obj = re.compile('\d{3}')  #将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字
ret = obj.findall('abc123eeee456as12') #正则表达式对象调用search,参数为待匹配的字符串
print(ret)
例题展示
['123', '456']
结果展示

 

import re:节省时间

import re   # 节省空间
ret = re.finditer('\d', 'ds3sy4784a')   #finditer返回一个存放匹配结果的迭代器
print(ret)  # <callable_iterator object at 0x10195f940>
print(next(ret).group())  #查看第一个结果
print(next(ret).group())  #查看第二个结果
print([i.group() for i in ret])  #查看剩余的左右结果
例题展示
3
4
['7', '8', '4']
结果展示

 

findall的用法:

ret = re.findall('www\.(baidu|oldboy)\.com', 'www.baidu.com')
print(ret)
# findall默认只显示分组中的
例题展示
['baidu']
结果展示

 

提取网站的用法:

ret = re.findall('www\.(?:baidu|oldboy)\.com', 'www.baidu.com')
print(ret)
例题展示
['www.baidu.com']
结果展示

 

ret=re.split("(\d+)","eva3egon4yuan")
print(ret) #结果 : ['eva', 'egon', 'yuan']
例题展示
['eva', '3', 'egon', '4', 'yuan']
结果展示

 

import re

ret = re.search("<(?P<tag>\w+)>(\w+)</(?P=tag)>","<h1>hello</h1>")
print(ret)
print(ret.group())
print(ret.group('tag'))
例题展示
<_sre.SRE_Match object; span=(0, 14), match='<h1>hello</h1>'>
<h1>hello</h1>
h1
结果展示

 

ret = re.search('(?P<flag>.+).*(?P=flag)','***abc***')
print(ret.group())



ret = re.search('(.+).*\\1','-123-')
print(ret.group())
例题展示
***abc***



-123-
结果展示

 

exp = "1-2*(60+(-40.35/5)-(-4*3))"
ret = re.findall('\d+\.\d+|(\d+)',exp)
print(ret)
ret.remove('')
print(ret)
例题展示
['1', '2', '60', '', '5', '4', '3']
['1', '2', '60', '5', '4', '3']
结果展示

 

爬虫练习:

 

 

 

 

 

 

 

 

 

 

 

 

 

 




























 

posted @ 2018-06-05 21:11  鞠先生  阅读(118)  评论(0编辑  收藏  举报