#!/usr/bin/python3
#-----------------------------------------
	#	正则表达式	#
#-----------------------------------------
#正则表达式(或RE)是一种小型的,高度专业化的编程语言，	
#它内嵌在python中,并通过re模块实现
#1.可以为想要匹配的相应字符串集指定规则
#2.该字符串集可能包含英文的语句,e-mail地址,命令...
#-----------------------------------------
#字符匹配
#1.普通字符一般都会和自身匹配
#2.元字符: . ^ $ * + ? {} [] \ | ()
# ->[]    -常用来指定一个字符集:[abc],[a-z]
#         -元字符在字符集中不起作用:[akm$]
#         -补集匹配不在区间范围内的字符:[^5]

# ->^     -匹配首行.除非设置MULTILINE标志,它只是匹配字符串的开始.在MULTILINE模式里,他也可以直接匹配字符串的每个换行

# ->$     -匹配尾行,尾行被定义为要么是字符串尾,要么是一个换行字符后面的任何位置.

# ->\     -反斜杠后面可以加不同的字符以表示不同的特殊意义
#         -也可以用与取消所以的元字符:\[ \\
#         :
#         \d:匹配任何十进制数,相当于[0-9]
#         \D:相当于[^0-9]
#         \s:匹配任何空白字符,相当于[\t\n\f\v]
#         \S:相当于[^ \t\n\f\v]
#         \w:匹配任何字母数字字符,相当于[a-zA-Z0-9]
#         \W:相当于[a-zA-Z0-9]

# ->{n}   :重复n次,{0,} = *,{1,} = +,{0,1} = ?
# ->*     :重复任意次
# ->+     :匹配多次,但至少出现一次
# ->?     :将重复0次或1次,表示可有可无
#-----------------------------------------
# RE的方法:
#     match():决定字符串是否在刚开始的位置匹配
#     match对象的方法:
#         ->group():返回被匹配的字符串。              p = re.compile('...')
#         ->start():返回匹配开始的位置                m = p.match()
#         ->end()：返回匹配到的结束位置               print (group())
#         ->span()：返回一个元组，包含（start，end）。
#     search():扫描字符串，找到字符在其中的位置
#     findall();找到所有子串，并把它们作为一个列表返回
#     finditer():找到所有子串，并把它们作为一个迭代器返回
#-----------------------------------------
import re 

# s = r'abc'

# retval = re.findall(s,'abccabc') #针对s这个规则来找到是否有匹配的
# print (retval)
# retval = re.findall(s,'aaaaa')
# print (retval)
#-----------------------------------------
# res = r"t[io]p"
# string = "top tip tap"

# retval = re.findall(res,string)
# print (retval)

# res = r"t[^io]p"
# retval = re.findall(res,string)
# print (retval)
#-----------------------------------------
# s = 'hello world ,hello boy'
# r = r'^hello'           #匹配行首的hello
# print (re.findall(r,s))

# r = r'boy$'             #匹配行尾的boy
# print (re.findall(r,s))
#-----------------------------------------
# r = r'010-\d{5}'        #重复匹配5次
# s = '010-18669146236'
# print (re.findall(r,s))

# r = r'010-?\d*'          #重复匹配任意次
# print (re.findall(r,s))
#-----------------------------------------
#用re.compile()来编译正则表达式
# r1 = r'\d{3,4}-?\d*'
# p_tel = re.compile(r1)   #将r1的方式编译到p_tel对象
# print (p_tel.findall('010-18669146236'))
# print (p_tel.findall('111-18669146236'))
#-----------------------------------------

# 编译时添加属性
re = re.compile(r'csvt',re.I)  #不区分大小写的属性
re_m = re.match('csvt i')
    print (re_m.end())
    print (re_m.span())
