import re
import urllib.request
'''
因本文件内容,有一些是后添加的。
若存在有不理解的代码语句,有可能需要参考
00.re2.py文件中涉及到的技巧。
亦或者直接参考python原文档
'''
def getHtml(url, code="utf8"):
page = urllib.request.urlopen(url)
html = page.read()
html = html.decode(code)
return html
def default_demo():
url = "http://www.baidu.com/"
reg = re.search(r'www\..*\.com', url)
print(reg.group(0))
reg = re.compile('www\..*\.com')
print(reg)
ret = re.findall(reg, url)
print(ret)
'''
# 2018.11.09
贪婪匹配问题
1. 诸如'.','*','?' 都是贪婪匹配,而'.?','*?','??'是非贪婪匹配,或者说是最小匹配
2. {m,n} 和 {m,n}? 的区别和以上说明类似
'''
ss = 'abcFFFFaadcP'
ret = re.findall(r'a(.*)c',ss)
print(ret)
ret = re.findall(r'a(.*?)c',ss)
print(ret)
ret = re.findall(r'F{2,4}',ss)
print(ret)
ret = re.findall(r'F{2,4}?',ss)
print(ret)
'''
1. A|B 匹配A或者B
'''
ss = 'abcFFFFaadcP'
ret = re.findall(r'a(?:d|b)c',ss)
print(ret)
'''
``` 简单的使用此处不再列举,此处主要针对**分组语法**进行说明 ```
### 捕获
- (exp)
> 匹配exp,并捕获文本到自动命名的组里
- (?<name>exp) 或者 (?'name'exp)
> 匹配exp,并捕获文本到名称为name的组里
- (?:exp)
> 匹配exp,不捕获匹配的文本
### 位置指定
- (?=exp)
> 匹配exp前面的位置
- (?<=exp)
> 匹配exp后面的位置
- (?!exp)
> 匹配exp后面跟的不是exp的位置
- (?<!exp)
> 匹配前面不是exp的位置
- (?#comment)
> 这个类型不对正则表达式产生影响,就是个注释
'''
import re
subject = '002d010070f1341217a1c6beae9779538cab5edbd8876539ab50aa2d67a2867328c605755a02a73860403aabe35cabf20a88a87e81beaab190836fd4572722a027b8ad3962508f41c9be3589e9e48ceba913845bb497b4157992c74f67be02a8db62ac7855e552b8d6efc1c3d7157ef1dfc0797bae70'
ret = re.sub(r"(?<=\w)(?=(?:\w\w)+$)", " ", subject)
print(ret)
subject = '''
def SendData(data):
def GetData(data):
def SendString():
def GetString():
def SendHex():
def GetHex():
'''
ret = re.findall(r".*(Send).*",subject)
print(ret)
ret = re.findall(r".*(?:Send).*",subject)
print(ret)
ret = re.findall(r".*Send(?=Data).*",subject)
print(ret)
ret = re.findall(r".*(?<=Send)Hex.*",subject)
print(ret)
ret = re.findall(r".*Send(?!Data).*",subject)
print(ret)
ret = re.findall(r".*(?<!Send)Hex.*",subject)
print(ret)
ret = re.findall(r".*(?#Send)Hex.*",subject)
print(ret)