Day 19
import re
strvar='asdfsf*&*^&^232**fkljklfg5'
lst=re.findall(r'\d',strvar)
print(lst)
strvar='ksjkejfjt98347895*&*(&*(&*(&#%U'
lst=re.findall(r'\D',strvar)
print(lst)
strvar='sadfasdf**fdd&&23中俄1132___9879)_00089)()9&……'
lst=re.findall(r'\w',strvar)
print(lst)
strvar='gkdhfgjhdkj(*)(*=---3353153213*&^*^#847'
lst=re.findall(r'\W',strvar)
print(lst)
strvar=' kjhjkhk kj nkj k -'
lst=re.findall(r'\s',strvar)
print(lst)
strvar='afklj sdfksj '
lst=re.findall('\S',strvar)
print(lst)
strvar="""
"""
lst=re.findall(r'\n',strvar)
print(lst)
strvar="""
"""
lst=re.findall(r'\t',strvar)
print(lst)
strvar='abdfrdsfg'
lst=re.findall('[abc]',strvar)
print(lst)
print(re.findall(r'a[abc]b','acb bca aab abb acb acc '))
print(re.findall(r'a[0123456789]b','a8b a5b aeb agb ahb='))
print(re.findall(r'a[0-9]b','a8b a5b aeb agb ahb'))
print(re.findall(r'a[a-z]b','a8b a5b aeb agb ahb'))
print(re.findall(r'a[0-z]b','a8b a5b aeb agb a@b'))
print(re.findall(r'a[^+\-*/]b','a%b cca*ba'))
lst=re.findall(r'a[\^\-]b','a+b a-b a^b')
print(lst)
'''\b 本身也是转义字符:退格(把光标向左移动一位)'''
lst=re.findall(r'a\\b',r'a\b')
print(lst[0])
print(re.findall(r'a?b','abbzab abb aab'))
print(re.findall(r'a+b','b ab aaaaaaba abb ab'))
print(re.findall(r'a*b','b ab aab abb b aaaaab'))
print(re.findall('a{1,3}b','aaab ab b aaaaab bbaab'))
print(re.findall('a{2}b','aab aaaba aab aaaaba'))
'''
贪婪匹配:默认向更多次数匹配(回溯算法)
非贪婪匹配:默认向更少次数匹配
在量词的后面接?
.?? .+? .*? {4,}?
回溯算法:从左向右进行匹配,直到匹配到最后,再也找不到了,回头,找最后一个(递归)
. 匹配任意字符,除了换行符\n
'''
strvar='刘能和刘老根和刘大拿子111子222'
lst=re.findall(r'刘.',strvar)
print(lst)
lst=re.findall(r'刘.?',strvar)
print(lst)
lst=re.findall(r'刘.+',strvar)
print(lst)
lst=re.findall(r'刘.*',strvar)
print(lst)
lst=re.findall(r'刘.{4,}',strvar)
print(lst)
lst=re.findall(r'刘.??',strvar)
print(lst)
lst=re.findall(r'刘.+?',strvar)
print(lst)
lst=re.findall(r'刘.*?',strvar)
print(lst)
lst=re.findall(r'刘.{4,}?',strvar)
print(lst)
'''
\b 本身也是转义字符:退格(把光标向左移动一位)
word
右边界:d\b
左边界:\bw
'''
strvar='word pwd scf'
lst=re.findall(r'd\b',strvar)
print(lst)
lst=re.findall(r'.*d\b',strvar)
print(lst)
lst=re.findall(r'.*?d\b',strvar)
print(lst)
lst=re.findall(r'\bw',strvar)
print(lst)
lst=re.findall(r'\bw.*',strvar)
print(lst)
lst=re.findall(r'\bw.*?',strvar)
print(lst)
lst=re.findall(r'\bw\S*',strvar)
print(lst)
'''
^ 匹配字符串的开始(必须以……开头)
$ 匹配字符串的结尾(必须以……结尾)
当使用^和$符号的时候,要把字符串看成整体
'''
strvar='大哥大嫂大爷'
print(re.findall('大.',strvar))
print(re.findall('^大.',strvar))
print(re.findall('大.$',strvar))
print(re.findall('^大.$',strvar))
print(re.findall('^大.*?$',strvar))
print(re.findall('^大.*?大$',strvar))
print(re.findall('^大.*?爷$',strvar))
print(re.findall('^g.*? ' , 'giveme 1gfive gay'))
print(re.findall('five$' , 'aassfive'))
print(re.findall('^giveme$' , 'giveme'))
print(re.findall('^giveme$' , 'giveme giveme'))
print(re.findall('giveme' , 'giveme giveme'))
print(re.findall("^g.*e",'giveme 1gfive gay'))
print(re.findall(r'.*?_good','wusir_good alex_good secretmen_good'))
print(re.findall('(.*?)_good','wusir_good alex_good secret_good'))
print(re.findall('(?:.*?)_good','wusir_good alex_good secret_good'))\
strvar='abcdefg'
lst=re.findall('a|b',strvar)
print(lst)
'''在使用|的时候,把不容易匹配的字符串放在前面,把容易匹配到的放在后面'''
strvar='abcggkgkgkjabacabcdwerwer'
lst=re.findall('abc|abcd',strvar)
lst=re.findall('abcd|abc',strvar)
print(lst)
strvar='.34 ... 78. 72 78.12 6.3 .3 .56.3'
lst=re.findall(r'\d+\.\d+',strvar)
print(lst)
lst=re.findall(r'\d+\.\d|\d+',strvar)
print(lst)
lst=re.findall(r'\d+(?:\.\d+)?',strvar)
print(lst)
lst=re.findall(r'(?:135|171)\d{8}',strvar)
print(lst)
strvar='13588889999'
lst=re.findall(r'^(?:135|171)\d{8}$',strvar)
print(lst)
strvar='www.baidu.com www.lagou.com www.oldboy.com'
lst=re.findall(r'(?:www)\.(?:baidu|oldboy)\.(?:com)',strvar)
print(lst)
'''
findall 是把符合条件的内容都匹配出来放在列表里
不能够把匹配到的结果和分组当中的内容显示在同意界面之中
search 按照正则表达式,把第一次匹配到的返回出来,返回的是对象
能够把匹配的结果和分组当中的内容显示出来
对象.group 返回的是匹配到的结果
对象.groups返回的是括号分组里面的内容
如果匹配不到内容,返回的是None,无法调用group和groups方法
'''
strvar='www.baidu.com www.lagou.com www.oldboy.com'
obj=re.search(r'www\.(baidu|oldboy)\.com',strvar)
res=obj.group()
print(res)
print(obj.group(1))
strvar='<div>今天天气不错~</div>'
lst=re.findall('<(.*?)>(.*?)<(.*?)>',strvar)
print(lst)
lst=re.findall(r'<(.*?)>(.*?)<(/\1)>',strvar)
print(lst)
strvar='a1b2cab'
obj=re.search(r'(.*?)\d(.*?)\d(.*?)\1\2',strvar)
res1=obj.group()
print(res1)
res2=obj.groups()
print(res2)
'''
(?P<组名>正则表打式)给这个组起一个名字
(?P=组名)引用之前组的名字,把改组名匹配到的内容放在当前位置
'''
strvar='a1b2cab'
obj=re.search(r'(?P<tag1>.*?)\d(?P<tag2>.*?)\d(?P<tag3>.*?)\1\2',strvar)
print(obj)
res1=obj.group()
print(res1)
res2=obj.groups()
print(res2)
obj=re.search(r'(?P<tag1>.*?)\d(?P<tag2>.*?)\d(?P<tag3>.*?)(?P=tag1)(?P=tag2)',strvar)
res1=obj.group()
print(res1)
res2=obj.groups()
print(res2)