import re
str1 ='abcsdicsdj'
#.表示匹配某个字符后面的任意一个字符
print(re.findall('ab.',str1))#没有括号,那么abc都显示
print(re.findall('ab(.)',str1))#有括号,只显示
#*表示匹配a后面有若干个b的字符,包括0个的情况
str2='abbabafeaghab'
print(re.findall('ab*',str2))#*表示匹配a后面有若干个b的字符,包括0个的情况
#['abb', 'ab', 'a', 'a', 'ab']
##+表示a后面有若干个b,不包括0个的情况
print(re.findall('ab+',str2))##+表示a后面有若干个b,不包括0个的情况
#?表示a后面有0个或1个b,不包括多个
print(re.findall('ab?',str2))
#.*? A(.*?)B 提取A与B之间的字符
str3='曾经沧海难为水除却巫山不是云取次花丛懒回顾半缘修道'
print(re.findall('不是(.*?)花丛', str3))#无法偷懒更多,已经规定了后一个字符必须是花丛
print(re.findall('不是.*?花丛', str3))#['不是云取次花丛']
#.*?属于偷懒匹配,尽可能少的匹配
print(re.findall('不是(.*?)', str3))#['']
#.*属于贪婪匹配,尽可能多的匹配
print(re.findall('不是.*',str3))#['不是云取次花丛懒回顾半缘修道']
#\w{n}匹配字母,数字,下划线,n表示匹配连续几位
str6='abc&^%$#@_098g'
print(re.findall('\w{3}', str6))#['abc', '_09']
#\W{n}匹配字母,数字,下划线以外的值
print(re.findall('\W', str6))#['&^%', '$#@']
#\s 匹配空字符串,\t制表符,\n换行符
str7='''空 山
不见人
但闻人语响 返景入
深林复 照青苔上'''
print(re.findall('\s',str7))
#\S 匹配空字符串,\t制表符,\n换行符以外的值
print(re.findall('\S',str7))
#\d匹配数字
str8='23gt876vf'
print(re.findall('\d',str8))
#\D匹配数字外的
print(re.findall('\D',str8))
#^匹配开头,$匹配结尾
list1=['abcde','dfabc','eeabcgg']
for onein list1:
#查找以abc开头的字符串
if re.findall('^abc',one):
print(one)
# 查找以abc结尾的字符串#
if re.findall('abc$',one):
print(one)
#re.I 不区分大小写
str9='ABCabcAbC'
print(re.findall('abc',str9,re.I))
#re.S 匹配多行中符合条件的值
a='''hellohtgerwcsxtevd
c35hytgevrcdworld'''
b=re.findall('hello(.*?)world',a)
c=re.findall('hello(.*?)world',a,re.S)
print(b)
print(c)