今日内容
1. re模块
2.面向对象编程
# re 模块
'''
import re
s = 'ab\nc1 a2b_ 333\t(0 '
# # \w 匹配所有字母数字下划线
# print(re.findall('\w', s))
# # \W 匹配所有非数字字母下划线
# print(re.findall('\W', s))
# # \s 匹配所有空白字符
# print(re.findall('\s', s))
# # \S 匹配所有非空白字符
# print(re.findall('\S', s))
# # \d 匹配所有数字
# print(re.findall('\d', s))
# # \D 匹配所有非数字
# print(re.findall('\D', s))
# # 混合使用
# print(re.findall('a\db', s)) # ['a2b']
# \n与\t
# msg = """h e\tll\n\no 123_ (0
# \t1
# 2
# 3
# """
# print(re.findall('\n', msg)) # ['\n', '\n', '\n', '\n', '\n', '\n']
# print(re.findall('\t', msg)) # ['\t', '\t']
# print(re.findall(' ', msg)) # [' ', ' ', ' ', ' ', ' ', ' ', ' ']
# ^与$
# ^ 从开头匹配,若第一个字符不匹配直接跳出; $ 从末尾匹配,若最后一个字符不匹配则直接跳出
# print(re.findall("^abc", "abc asdf 2133 abcdfabc"))
# print(re.findall("abc$", "abc asdf 2133 abcdfabc"))
# print(re.findall("a\w\w\wc", "ab12c3c a213c"))
# print(re.findall("^a\w\w\wc$", "ab_2c")) # ['ab_2c']
# print(re.findall("^a\w\w\wc$", "ab_2c abxxc")) # []
s1 = 'a1b awb a+b aaaab a\nb a\tb'
# . 匹配一个字符,该字符可以是任意字符 (默认不匹配\n,可加上re.DOTALL使其匹配\n)
# print(re.findall('a.b', s1)) # ['a1b', 'awb', 'a+b', 'aab', 'a\tb']
# print(re.findall('a.b', s1, re.DOTALL)) # ['a1b', 'awb', 'a+b', 'aab', 'a\nb', 'a\tb']
# [] 代表匹配一个字符,我们可以指定该字符的范围
# '-' 横杠 有代表范围的意义,当需要取出带有'-'的字符时,'-'放在[]内的开头或结尾
# print(re.findall("a[+-]b", "a1b a2b aab aaaaaaab a+b a-b a c"))
# print(re.findall("a[.*/+-]b", "a.b a2b a*b a/b aab aaaaaaab a+b a-b a c")) # -放在[]内的开头或结尾
# print(re.findall("a[a-z]b", "a.b a2b a*b a/b aab aaaaaaab a+b a-b a c"))
# print(re.findall("a[a-zA-Z]b", "a.b a2b a*b a/b aAb aCb aab aaaaaaab a+b a-b a c"))
# print(re.findall("a\db", "a.b a2b a*b a/b aAb aCb aab aaaaaaab a+b a-b a c"))
# print(re.findall("a[0-9]b", "a.b a2b a*b a/b aAb aCb aab aaaaaaab a+b a-b a c"))
# [^...]代表取反
# print(re.findall("a[^0-9]b", "a.b a2b a*b a/b aAb aCb aab aaaaaaab a+b a-b a c"))
# *: 左边的字符出现0次或者无穷次
# print(re.findall("ab*","a ab abb abbbbbbbbbbbb bbbbbbbbb"))
# +: 左边的字符出现1次或者无穷次
# print(re.findall("ab+","a ab abb abbbbbbbbbbbb bbbbbbbbb"))
# {n,m}: 左边的字符出现n次到m次
# print(re.findall("ab{2,5}", "a ab abb abbb abbbbb abbbbbbbbb bbbbbb")) # ['abb', 'abbb', 'abbbbb', 'abbbbb']
# print(re.findall("ab{0,}","a ab abb abbbbbbbbbbbb bbbbbbbbb"))
# print(re.findall("ab*","a ab abb abbbbbbbbbbbb bbbbbbbbb"))
# print(re.findall("ab{1,}","a ab abb abbbbbbbbbbbb bbbbbbbbb"))
# print(re.findall("ab+","a ab abb abbbbbbbbbbbb bbbbbbbbb"))
# ?: 左边那个字符出现0次到1次
# print(re.findall("ab?", "a ab abb abbbbbb bbbbb")) # ['a', 'ab', 'ab', 'ab']
# .*: 匹配所有
# print(re.findall("a.*b","123 a1231-==-b123123123123123b")) # ['a1231-==-b123123123123123b']
# print(re.findall("a.*?b","123 a1231-==-b123123123123123b")) # ['a1231-==-b']
# 例1:
# msg = '< a href="www.baidu.com" target="_blank"><strong><span style="color: #ff0000;">原理图:https://pan.baidu.com/s/1skWyTT7</span></strong></ a>< a href="https://www.baidu/com">"点我啊"</ a>'
# print(re.findall('href=".*?"', msg))
# print(re.findall('href="(.*?)"', msg))
# 例2:
# print(re.findall("a.*b","a1b a+b a-b a\nb a\tb",re.DOTALL))
# ():分组
# print(re.findall('ab+','ababab123')) #['ab', 'ab', 'ab']
# print(re.findall('(ab)+123','ababab123')) #['ab'],匹配到末尾的ab123中的ab
# (?:)取消分组
# print(re.findall('(?:ab)+123', 'ababab123'))
# # findall 的结果不是匹配的全部内容,而是组内的内容,?:可以让结果为匹配的全部内容
# |:或者
# print(re.findall("compan(?:ies|y)", "Too many companies have gone bankrupt, and the next one is my company'"))
# print(re.findall('abc(?:de|fg)','abcdef abcfgyu'))
# 输出字符串中所有数字(整型、浮点型)
# print(re.findall("\d+\.?\d*", "9asfdasldf1111asdf3333dfadf3.4dafadf3.5555asdfsafd.5555"))
# 12. \
print(re.findall(r'a\\c', 'a\c a1c aac')) #对于正则来说a\\c确实可以匹配到a\c,但是在python解释器读取a\\c时,会发生转义,然后交给re去执行,所以抛出异常
print(re.findall('a\\\\c', 'a\c a1c aac'))
# ===========================re模块提供的方法介绍===========================
# print(re.findall('e', 'eat three eggs')) # ['e', 'e', 'e', 'e'],返回所有满足匹配条件的结果,放在列表里
# print(re.search('e', 'eat three eggs').group()) # e,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
# print(re.search("\d+\.?\d*", "1.3 aa3.44aaa").group()) # 1.3
# print(re.search("\d+\.?\d*", "asdfsadf")) # None
# print(re.match("\d+\.?\d*"," 1.3 aa3.44aaa")) # None
# print(re.match('e', '3eat three eggs')) # None,同search,不过在字符串开始处进行匹配,完全可以用search+^代替match
# print(re.split('[:=-]', "aabc:18-male=10")) # 切分 ['aabc', '18', 'male', '10']
# msg = '<a href="https://pan.baidu.com/s/1skWyTT7" target="_blank"><strong><span style="color: #ff0000;">原理图:https://pan.baidu.com/s/1skWyTT7</span></strong></a><a href="https://www.baidu/com">"点我啊"</a>'
# print(re.findall('href=".*?"', msg))
# obj = re.compile('\d{2}')
# print(obj.search('abc123eeee').group()) # 12
# print(obj.findall('abc123eeee')) # ['12'],重用了obj
'''
# 面向对象编程思想
"""
面向过程编程
核心是过程二字,过程是解决问题的步骤
基于该思想写程序就是在设计一条条的流水线
优点:复杂的问题流程化、进而简单化
缺点:扩展性差
面向对象编程
核心是对象二字,对象是一个用来存放数据与功能的容器
基于该思想写程序就是在整合程序
优点:可扩展性强
缺点:编程的复杂度高
"""