Python 小栈_14:Python os模块和正则定理

今日所学:

 

一、正则定理

   1、re正则模块

re正则用来字符串匹配的,只处理字符串
元字符:. ^ $ * + ? {} [] () / |

2、元字符

import re # 1.通配符. print(re.findall("h...y","hshfhappyfkshkf")) # 一个.代表任意一个字符,除了\n # 2.上角符 ^ print(re.findall("^h..h","hshfhappyfkshkf")) # ^用来从字符串开头开始匹配,必须放在开头 # 3、$ print(re.findall("h.f$","hshfhappyfkshkf")) # $用来从字符串结尾开始匹配,必须放在最后 # 4、*、+、? ——贪婪匹配 print(re.findall("abc*","abcccccc")) print(re.findall("abc+","abcccccc")) print(re.findall("abc?","abcccccc")) # 区别: ''' *(0,无穷) +(1,无穷) ?(0,1) ''' print(re.findall("abc*","ab")) #可以取到,c为0个也可以 print(re.findall("abc+","ab")) #不可以取到,c必须有一个 # 要把贪婪匹配变为惰性匹配,则只要在后面加入?就可以了。 print(re.findall("abc*?","abccc")) #可以取到,变为惰性后最后一个字符不取 print(re.findall("abc+?","abccc")) #不可以取到,变为惰性后最后一个字符会取一次 # 5、{} 范围匹配 ''' {0,}==* {1.}==+ {0,1)==? ''' print(re.findall("abc{1,4}","abcccccc")) # 大括号内的数字表示最后一个字符取多少次,也属于贪婪匹配 # 6、[]字符集 print(re.findall("q[a-z]*","jkhdlkhaskjqjkshfkjhsa")) # 在[]内五特殊符号,除了三个-、^、\ print(re.findall("[^a-z]","abccc2423ccc44654765")) print(re.findall("\([^()]*\)","5*7+(8-5)/3-10")) #把一个算式中的最里面一个括号的内容算出来 # 7、\转义符 print(re.findall("\d","abccc4231ccc654645")) #['4', '2', '3', '1', '6', '5', '4', '6', '4', '5'] print(re.findall("\d+","abccc4231ccc654645")) #['4231', '654645'] print(re.findall("\d*","abccc4231ccc654645")) #['', '', '', '', '', '4231', '', '', '', '654645', ''] print(re.findall("\d{1,4}","abccc4231ccc654645")) #['4231', '6546', '45'] print(re.findall("\d?","abccc4231ccc654645")) print(re.findall("\D","abccc4231ccc654645")) #['a', 'b', 'c', 'c', 'c', 'c', 'c', 'c'] print(re.findall("\s","abccc4231cc c654 645 ")) #截取空白字符 print(re.findall("\S","abccc4231cc c654 645")) #截取非空白字符 print(re.findall("\w","abccc4231cc c654 645")) #截取的是字母数字字符 print(re.findall("\W","abccc4231cc c654 645")) #截取的是非字母数字字符 print(re.findall("I\\b","I am happy")) #注意在python解释器层面,转义符也需要做一层转换,再到re中 print(re.findall(r"I\b","I am happy")) #可以再加上一个\,或者直接在最前面加一个r,表示使用原生字符串 # 8、管道符| 表示或的意思 print(re.findall("ab|bc","abc")) >>> ['happy'] [] ['hkf'] ['abcccccc'] ['abcccccc'] ['abc'] ['ab'] [] ['ab'] ['abc'] ['abcccc'] ['qjkshfkjhsa'] ['2', '4', '2', '3', '4', '4', '6', '5', '4', '7', '6', '5'] ['(8-5)'] ['4', '2', '3', '1', '6', '5', '4', '6', '4', '5'] ['4231', '654645'] ['', '', '', '', '', '4231', '', '', '', '654645', ''] ['4231', '6546', '45'] ['', '', '', '', '', '4', '2', '3', '1', '', '', '', '6', '5', '4', '6', '4', '5', ''] ['a', 'b', 'c', 'c', 'c', 'c', 'c', 'c'] [' ', ' ', ' '] ['a', 'b', 'c', 'c', 'c', '4', '2', '3', '1', 'c', 'c', 'c', '6', '5', '4', '6', '4', '5'] ['a', 'b', 'c', 'c', 'c', '4', '2', '3', '1', 'c', 'c', 'c', '6', '5', '4', '6', '4', '5'] [' ', ' '] ['I'] ['I'] ['ab']

    3、元字符之转义符\

斜杠后边跟元字符去除特殊功能,比如\.
斜杠后边跟普通字符实现特殊功能,比如\d

\d  匹配任何十进制数;它相当于类 [0-9]。
\D 匹配任何非数字字符;它相当于类 [^0-9]。
\s  匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
\S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
\b  匹配一个特殊字符边界,比如空格 ,&,#等

    4、给分组的部分取名并调用


# ?P<分组名> 是用来把匹配到的对象起一个名字,再用.group()的方法调用出来即可 print(re.findall("(?P<name>\w+)","alex 12")) #findall 匹配全部 ret=re.search("(?P<name>\w+)","alex 12") #search只匹配一次,找到后就不再继续找了,这时只找出一个对象 print(ret) print(ret.group("name")) #用.group()的方法把对应的元素拿出来 >>> ['alex', '12'] <re.Match object; span=(0, 4), match='alex'> alex

 

二、os模块

1、os函数


re.findall() re.search() re.search().group() print(re.match("\d+","12324fhaskdh").group()) #相当于在search的前面加个^,只能从开头开始匹配。 print(re.split("a","asdgfgsfdhdfjadsg")) print(re.split("[ab]","ahhboidskfabhf")) #可以根据多种方式进行分割,且分为两部分,若左边没有,则为空 print(re.sub("\d","abc","1213gsdgsf4654sdf")) #sub为替代,基本有三个参数,第一个为什么方式匹配的,第二个为新的替换的内容,第三个 print(re.sub("\d+","A","13jsdf1232",1)) # 为字符串,第4个参数可定义替换几次。 print(re.subn("\d","abc","1213gsdgsf4654sdf")) #也是替换,只是返回时以元祖形式返回出新的内容和替换次数。 com=re.compile("\d+") print(com.findall("132kdh43534ahf")) #compile相当于把一个匹配方式先做定义,之后可以方便多次调用 print(re.finditer("\d+","124hhsfks123")) #也是匹配一个,只是返回的是一个迭代器,可用next()的方法取出 ret=re.finditer("\d+","124hhsfks123") print(next(ret)) print(next(ret).group()) >>> 12324 ['', 'sdgfgsfdhdfj', 'dsg'] ['', 'hh', 'oidskf', '', 'hf'] abcabcabcabcgsdgsfabcabcabcabcsdf Ajsdf1232 ('abcabcabcabcgsdgsfabcabcabcabcsdf', 8) ['132', '43534'] <callable_iterator object at 0x0000020C5CDCABE0> <re.Match object; span=(0, 3), match='124'> 123

2、匹配出所有的整数

import re

#ret=re.findall(r"\d+{0}]","1-2*(60+(-40.35/5)-(-4*3))")
ret=re.findall(r"-?\d+\.\d*|(-?\d+)","1-2*(60+(-40.35/5)-(-4*3))")  #管道符前匹配出了-40.35,而后面再匹配出所有的数字时已没有了小数
ret.remove("")  #在上一步会有一个""字符串,要把它移去

print(ret)

>>>
['1', '-2', '60', '5', '-4', '3']

 

以上。

上一篇:logging、re模块


下一篇:疫情环境下的网络学习笔记 python 4.1