day23

今日内容
 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
'''

# 面向对象编程思想
"""
面向过程编程
    核心是过程二字,过程是解决问题的步骤
    基于该思想写程序就是在设计一条条的流水线

    优点:复杂的问题流程化、进而简单化
    缺点:扩展性差

面向对象编程
    核心是对象二字,对象是一个用来存放数据与功能的容器
    基于该思想写程序就是在整合程序

    优点:可扩展性强
    缺点:编程的复杂度高

"""

 

posted @ 2020-08-03 17:02  板鸭没有腿  阅读(156)  评论(0)    收藏  举报