import re
str="abcdefggfffiiiikkkk123456789"
print(re.search(r'^ab', str)) #匹配字符串的开头
# <_sre.SRE_Match object; span=(0, 2), match='ab'>
print(re.search(r'def$', str)) #匹配字符串的末尾
# <_sre.SRE_Match object; span=(3, 6), match='def'>
#用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
print(re.search(r'[cd]', str))
# <_sre.SRE_Match object; span=(2, 3), match='c'>
# 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
print(re.search(r'[^cd]', str))
# <_sre.SRE_Match object; span=(0, 1), match='a'>
# 匹配0个或多个的表达式。
print(re.search(r'z*', str))
# <_sre.SRE_Match object; span=(0, 0), match=''>
# 匹配1个或多个的表达式。
print(re.search(r'g', str))
# <_sre.SRE_Match object; span=(6, 7), match='g'>
# 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
print(re.search(r'(liu)?jun', 'jun'))
# <_sre.SRE_Match object; span=(0, 3), match='jun'>
# 精确匹配 n 个前面表达式。
# 例如, o{2} 不能匹配 "Bob" 中的 "o",
# 但是能匹配 "food" 中的两个 o。
print(re.search(r'liuju{2}', 'liujuuu'))
# <_sre.SRE_Match object; span=(0, 6), match='liujuu'>
# 匹配 n 个前面表达式。
# 例如, o{2,} 不能匹配"Bob"中的"o",
# 但能匹配 "foooood"中的所有 o。
print(re.search(r'liuju{2,}', 'liujuuuu'))
# <_sre.SRE_Match object; span=(0, 8), match='liujuuuu'>
# 匹配n到m次由前面的正则表达式定义的片段,贪婪方式
print(re.search(r'liuju{2,4}', 'liujuuuuuu'))
# <_sre.SRE_Match object; span=(0, 8), match='liujuuuu'>
# 匹配a或b
print(re.search(r'Java|java', 'java'))
# <_sre.SRE_Match object; span=(0, 4), match='java'>
#匹配任何字母及数字
print(re.search(r'[a-zA-Z0-9]', 'java'))
# <_sre.SRE_Match object; span=(0, 1), match='j'>
# 匹配一个数字字符。等价于[0 - 9]。
print(re.search(r'\dc', 'java2c'))
# <_sre.SRE_Match object; span=(4, 6), match='2c'>
# 匹配一个非数字字符。等价于[ ^ 0 - 9]。
print(re.search(r'\Dc', 'javafc'))
# <_sre.SRE_Match object; span=(4, 6), match='fc'>
# 匹配任何空白字符,
# 包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
print(re.search(r'\s', 'javafc java'))
# <_sre.SRE_Match object; span=(6, 7), match=' '>
# 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
print(re.search(r'\wc', 'javaf_c java'))
# <_sre.SRE_Match object; span=(5, 7), match='_c'>
# ‘\b’ 匹配单词边界
print(re.search(r'\bam\b', 'i am a boy !'))
# <_sre.SRE_Match object; span=(2, 4), match='am'>
print(re.findall(r'(?:ab)+',"ccabababababababab" ))
# ['abababababababab']
s = 'zvzc zcpython python1234 abcPython' # 字符串
pattern = re.compile('[Pp]ython')
print(pattern.search(s)) # 返回match对象
print(pattern.search(s).group()) # 返回模式匹配的第一个子串
print(pattern.findall(s)) # 返回列表,表中元素是匹配的各子串
# <_sre.SRE_Match object; span=(7, 13), match='python'>
# python
# ['python', 'python', 'Python']
pattern = re.compile('(P|p)ython')
print(pattern.search(s)) # 返回match对象
print(pattern.search(s).group()) # 返回模式匹配的第一个子串
print(pattern.search(s).groups())
# 返回小括号里的内容。就是先匹配整个模式得到子串'python',
# 然后拿得到的子串'python'去匹配小括号里的模式,最后得到'p',并放到元组里
print(pattern.findall(s))
# 返回小括号里的内容。就是先匹配整个模式得到子串'python'和'Python',
# 然后拿得到的子串'python'或'Python'去匹配小括号里的模式,最后得到'p'和'P',并放到列表里
#
# <_sre.SRE_Match object; span=(7, 13), match='python'>
# python
# ('p',)
# ['p', 'p', 'P']