import re
# findall('正则表达式',‘待匹配的字符串’) #返回匹配到字符串,并存放在列表中
text = 'abcdefg'
res = re.findall('a..d', text)
print(res)
# ['abcd']
# 函数会在字符串内按规则匹配,当找到第一个匹配结果时就结束查找,然后返回一个包含匹配信息的对象,该对象可以 通过 调用group()方法 得到匹配的字符串,
# 如果没有匹配到字符串,则返回None
ret = re.search('abc', 'this is abcABC').group()
print(ret) # 结果 : 'abc'
# compile,先将正则编译后放入对象,后面可重复使用,当多次使用同一正则时,可提高效率
obj = re.compile('\d{3}') # 将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字
ret = obj.search('abc123eeee') # 正则表达式对象调用search,参数为待匹配的字符串
print(ret.group()) # 结果 : 123
# match 在字符串开始处 就按规则匹配,其它 与search()函数使用方法一样
ret = re.match('this', 'this is abcABC').group()
print(ret) # 结果 : 'this'
# finditer ,跟findall功能相同,返回的是存放结果的迭代器
ret = re.finditer('\d', 'ds3sy4784a')
print(ret) # <callable_iterator object at 0x10195f940>
print(next(ret).group()) # 查看第一个结果 '3'
print(next(ret).group()) # 查看第二个结果 '4'
print([i.group() for i in ret]) # 查看剩余的匹配结果 ['7', '8', '4']
# sub 将数字替换成'H',参数1表示只替换1个
ret = re.sub('\d', 'H', 'eva3egon4yuan4', 1)
print(ret) # evaHegon4yuan4
# subn 将数字替换成'H',返回元组(替换的结果,替换了多少次),即('evaHegonHyuanH', 3)
ret = re.subn('\d', 'H', 'eva3egon4yuan4')
print(ret) # ('evaHegonHyuanH', 3)
# split 以字符分隔字符串成列表
ret = re.split('[ab]', 'abcd') # 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
print(ret) # ['', '', 'cd']
ret = re.split("\d+", "eva3egon4yuan")
print(ret) # 结果 : ['eva', 'egon', 'yuan']
ret = re.split("(\d+)", "eva3egon4yuan")
print(ret) # 结果 : ['eva', '3', 'egon', '4', 'yuan']
# 在匹配部分加上()之后所切出的结果是不同的,
# 没有()的没有保留所匹配的项,但是有()的却能够保留了匹配的项,
# 这个在某些需要保留匹配部分的使用过程是非常重要的。