re正则模块细解,面向对象编程思路的优劣。

Python小白,白嫖基地。

一, re模块(正则表达式)

正则表达式是什么:

由一系列特殊字符拼接而成的表达式/规则,该表达式用于从一个大字符串中匹配出符合规则的子字符串

正则表达式:记忆图

在这里插入图片描述

正则表达式讲解示例:

1 \w 模式匹配字母数字,以及下划线:
s='a b\t,t-ie ns2_?(k8'  #对象。

print(re.findall('\w',f'{s}')) 

结果:

['a', 'b', 't', 'i', 'e', 'n', 's', '2', '_', 'k', '8']
2 \W模式下匹配非字母,数字,下划线
s='a b\t,t-ie ns2_?(k8'  #对象。

print(re.findall('\W',f'{s}'))

结果:

[' ', '\t', ',', '-', ' ', '?', '(']
3 \s模式下匹配任意空白字符,如(\t,\n,\r,\f)
s='a b\t,t-ie ns2_?(k8'  #对象。

print(re.findall('\w',f'{s}')) 

结果:

[' ', '\t', ' ']
4 \S 模式下匹配非空白字符
ss='a 6k\t,1t8y-i  s256_?(k798' #对象。

print(re.findall('\S',f'{s}'))

结果:

['a', 'b', ',', 't', '-', 'i', 'e', 'n', 's', '2', '_', '?', '(', 'k', '8']
5 \d模式下匹配任意数字(0-9) 单个字符匹配
ss='a 6k\t,1t8y-i  s256_?(k798'  #对象。

print(re.findall('\d',f'{ss}'))

结果:

['6', '1', '8', '2', '5', '6', '7', '9', '8']
6 \D模式下匹配任意非数字
s='a b\t,t-ie ns2_?(k8'  #对象。

print(re.findall('\D',f'{ss}'))

结果:

['a', ' ', 'k', '\t', ',', 't', 'y', '-', 'i', ' ', ' ', 's', '_', '?', '(', 'k']
7. \n与\t
msg="""h e\tll\n\no 123_ (0
\t1
    2
3
"""
print(re.findall('\n',msg))
print(re.findall('\t',msg))
print(re.findall(' ',msg))

结果:

['\n', '\n', '\n', '\n', '\n', '\n']
['\t', '\t']
[' ', ' ', ' ', ' ', ' ', ' ', ' ']
8 ^与$ ^是以什么什么开头,以什么什么结尾
print(re.findall("egon","egon asdf 213123 egonafsadfegon"))#未加标识

print(re.findall("^egon","egon asdf 213123 egonafsadfegon"))#以什么什么开头
print(re.findall("egon$","egon asdf 213123 egonafsadfegon"))#以什么什么结尾
print(re.findall("egon$","egon asdf 213123 egonafsadfegon "))#末尾有空格


print(re.findall("a\w\w\wc","ab12c3c a213c"))#以a开头b结尾,中间可以是字母数字,以及下划线
print(re.findall("^a\w\w\wc$","ab_2c"))

结果:

['egon', 'egon', 'egon']
['egon']
['egon']
[]

['ab12c', 'a213c']
['ab_2c']
9.1 .(点):代表匹配一个字符,该字符可以是任意字符
print(re.findall("a\db","a1b a2b aab aaaaaaab a+b a-b a c"))
print(re.findall("a\wb","a1b a2b aab aaaaaaab a+b a-b a c"))
print(re.findall("a.b","a1b a2b aab aaaaaaab a+b a-b a b a c"))
print(re.findall("a.b","a1b a2b aab aaaaaaab a\tb a-b a\nb a c"))
#加上 re.DOTALL 可以吧\n也给取出来
print(re.findall("a.b","a1b a2b aab aaaaaaab a\tb a-b a\nb a c",re.DOTALL))

结果:

['a1b', 'a2b']
['a1b', 'a2b', 'aab', 'aab']
['a1b', 'a2b', 'aab', 'aab', 'a+b', 'a-b', 'a b']
['a1b', 'a2b', 'aab', 'aab', 'a\tb', 'a-b']
['a1b', 'a2b', 'aab', 'aab', 'a\tb', 'a-b', 'a\nb']
9.2 []:代表匹配一个字符,我们可以指定该字符的范围
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")) # -放在[]内的开头或结果

结果:

['a+b', 'a-b']
['a.b', 'a*b', 'a/b', 'a+b', 'a-b']
['aab', 'aab']
['aAb', 'aCb', 'aab', 'aab']
['a2b']
['a2b']
['a.b', 'a*b', 'a/b', 'aAb', 'aCb', 'aab', 'aab', 'a+b', 'a-b']
9.3 *: 左边那个字符出现0次或者无穷次
print(re.findall("ab*","a ab abb abbbbbbbbbbbb bbbbbbbbb"))

结果:

['a', 'ab', 'abb', 'abbbbbbbbbbbb']#遇到空格停止。
9.4 +: 左边那个字符出现1次或者无穷次
print(re.findall("ab+","a ab abb abbbbbbbc bbbabbcbb"))

结果:

['ab', 'abb', 'abbbbbbb', 'abb']
9.5 {n,m}: 左边那个字符出现n次到m次
print(re.findall("ab{0,}","a ab abb abbbbbbcbbbb babbbbbvbbb"))
#与上述的等价
print(re.findall("ab*","a ab abb abbbbbbcbbbb babbbbbvbbb"))

print(re.findall("ab{1,}","a ab abb abbbbbbcbbbb babbbbbvbbb"))
#与上述的等价
print(re.findall("ab+","a ab abb abbbbbbcbbbb babbbbbvbbb"))

结果:

['a', 'ab', 'abb', 'abbbbbb', 'abbbbb']
['a', 'ab', 'abb', 'abbbbbb', 'abbbbb']
['ab', 'abb', 'abbbbbb', 'abbbbb']
['ab', 'abb', 'abbbbbb', 'abbbbb']
9.6 ?: 左边那个字符出现0次到1次
print(re.findall("ab?","a ab abb abbbbbbbbbbbb bbbabbbbb"))

结果:

['a', 'ab', 'ab', 'ab', 'ab']
9.7 .*: 匹配所有
print(re.findall("a.*b","123 a1231-==-000b123123123123123b"))

#  .*?: 匹配所有(加上问号不会匹配接下来的b遇到第一个就结束了,防止它过度抓取)
print(re.findall("a.*?b","123 a1231-==-000b123123123123123b"))

结果:

['a1231-==-000b123123123123123b']
['a1231-==-000b']
例1:取地址信息
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))
print(re.findall('href="(.*?)"',msg))

结果:

['href="https://pan.baidu.com/s/1skWyTT7"', 'href="https://www.baidu/com"']
['https://pan.baidu.com/s/1skWyTT7', 'https://www.baidu/com']
例2:取以a开头b结尾的所有字符串
print(re.findall("a.*b","a1b a+b a-b a\nb a\tb",re.DOTALL))
print(re.findall("a.*b","a1b a+b a-b a\nb a\tb"))

结果:

['a1b a+b a-b a\nb a\tb']  #re.DOTALL可以让*吧\n也抓取到
['a1b a+b a-b', 'a\tb']
10 ():分组
print(re.findall('ab+','ababab123')) #['ab', 'ab', 'ab']
print(re.findall('(ab)+123','ababab123')) #['ab'],匹配到末尾的ab123中的ab

结果:

['ab', 'ab', 'ab']
['ab']
10.1 取消分组
print(re.findall('(?:ab)+123','ababab123'))
#findall的结果不是匹配的全部内容,而是组内的内容,?:可以让结果为匹配的全部内容

结果:

['ababab123']
11 |:或者
print(re.findall("compan(?:ies|y)","Too many companies have gone bankrupt, and the next one is my company'"))

print(re.findall("(\d+\.?\d+)","aslfdasldf1111asdf3333dfadf3.4dafadf3.5555asdfsafd.5555"))

结果:

['companies', 'company']
['1111', '3333', '3.4', '3.5555', '5555']
12. \
print(re.findall('a\\\\c','a\c a1c aac')) 
#对于正则来说a\\c确实可以匹配到a\c,但是在python解释器读取a\\c时,
#会发生转义,然后交给re去执行,所以抛出异常
print(re.findall(r'a\\c','a\c a1c aac'))
#对于正则来说a\\c确实可以匹配到a\c,但是在python解释器读取a\\c时,
#会发生转义,然后交给re去执行,所以抛出异常

结果:

['a\\c']
['a\\c']
12.1re模块提供的方法介绍\\ re.search
print(re.findall('e','alex make love') )  
#['e', 'e', 'e'],返回所有满足匹配条件的结果,放在列表里
print(re.search('e','alex make love')) 
#e,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。

结果:

['e', 'e', 'e']
<re.Match object; span=(2, 3), match='e'>
12. 2 .group()
print(re.search("\d+\.?\d*","1.3 aa3.44aaa").group())
print(re.search("\d+\.?\d*","asdfsadf"))

结果:

1.3
None
12.3 分割.split(‘加条件’)
msg="egon:18-male=10"
print(msg.split(':'))
print(re.split('[:=-]',msg))

结果:

['egon', '18-male=10']
['egon', '18', 'male', '10']

面向对象编程思路

面向过程编程

  • 核心是过程二字,过程是解决问题的步骤,即先干啥再干啥后干啥
  • 基于该思想写程序就是在设计一条条的流水线
优点:复杂的问题流程化、进而简单化
缺点:扩展性差

面向对象编程

  • 核心是对象二字,对象是一个用来盛放数据与功能的容器
  • 基于该思想写程序就是在整合程序
优点:可扩展性强
缺点:编程的复杂度高
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值