python-day17

今日内容:

1.re模块

 

 

1.re模块

import re   # 导入模块

查找,验证:

re.search(rule,string)    # 如果没有匹配结果返回None,如果有结果返回一个结果集,用.group()获取结果, .span()获取内容索引位置,特点是找到即返回

re.findall(rule,string)     # 如果没有匹配结果返回一个空列表,如果有结果返回一个列表存放所有匹配到的内容

re.match()    # 只是规则前加了^,用search可以替代

 

替换,切割:

re.sub(rule,repl,string,count=0)    # 替换string里匹配到的内容,默认全部替换,可以指定替换次数,返回一个字符串

re.subn(rule,repl,string,count=0)   # 替换string里匹配到的内容,默认全部替换,可指定次数,返回一个元祖,第一位为替换后的字符串,第二位为替换次数

re.split(rule,string,maxsplit=0)   # 以规则切割string,可指定切割次数,如果没有匹配到内容返回一个内容的列表

 

提前定制规则:

场合:用在需要重复用到同一个规则时候,提前编译可以节省时间,提高效率

rule = re.compile(rule)  # 提前编译

rule.search(string)   # 使用提前编译的规则进行search

 

匹配到内容生成一个迭代器:

场合:在提取到大量数据时候,不会担心内存溢出,节省内存空间

finditer(rule,string)   # 得到的是一个结果集,需要.group()取值,.span()取索引范围

 

1.2使用分组:

findall():

注: findall()默认加分组会优先提取括号内的内容

import re
msg = r"""
# <h1>hahaha<\h1>
# <h2>wahaha<\h2>
# <title>qqxing<\title>
"""
ret = re.findall('>.+<',msg)   
print(ret)
# ['>hahaha<', '>wahaha<', '>qqxing<']
print([i.strip('<>') for i in ret])  # 不加分组需要手动过滤一遍
# ['hahaha', 'wahaha', 'qqxing']

# 加分组更好用
ret = re.findall('>(.+)<',msg)  # findall在加上分组后会优先提取括号的内容
print(ret)
# ['hahaha', 'wahaha', 'qqxing']

取消分组:   (?: )

ret = re.findall('>(?:.+)<',msg)

 

search() :

# 不会受到分组影响

 

split():

# 使用分组会保留分组的内容

ret = re.split('(\d+)','a123b456c678')
print(ret)
# ['a', '123', 'b', '456', 'c', '678', '']

 

1.3分组命名

可以很方便取到分组的内容。

格式:(?P<变量名>)

msg = r"""
# <h1>hahaha<\h1>
# <h2>wahaha<\h2>
# <title>qqxing<\title>
"""
ret = re.search('<(?P<table>.+?)>(?P<content>.+?)<.+',msg)
print(ret.group()) # <h1>hahaha<\h1>
print(ret.group('table'))  # h1
print(ret.group('content'))  # hahaha

 

1.4匹配需要的内容:

msg = r"""
# <h1>hahaha<\h1>
# <h2>wahaha<\h2>
# <title>qqxing<\title>
"""
# 当遇到不想匹配到的内容,要把不需要和需要的都写出来,用分组把需要的取出
ret = re.findall(r'<(.+?)>.+?<\\.+>',msg)
print(ret)
# ['h1', 'h2', 'title']

a = '1-2*(60+(-40.35/5)-(-4*3))'
ret = re.findall('\d+\.\d+|(\d+)',a)
ret.remove('')
print(ret)
# ['1', '2', '60', '5', '4', '3']

 


 

上一篇:Day17


下一篇:JavaWeb基础知识day17——注解&Servlet3.0实现文件上传