python之re模块

Posted 老李头儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之re模块相关的知识,希望对你有一定的参考价值。

#正则表达式是用来干嘛的?
#匹配 字符串
# s="hello world"
# print(s.find("llo"))
# print(s.replace("ll","mm"))
# print(s.split("w"))

#string提供的方法是完全匹配
#引入正则表达式,进行模糊匹配
import re
# ret=re.findall("w\\w{2}l","hello world")
# print(ret)
# red=re.findall("xiong","hfjihdjkjldnjxiongkhddfnhvjkndfkln")
# print(red)#其实这种不适用re,反倒用字符串的方法也可以,杀鸡用牛刀也不好


# 11元字符 "." "^" "$" "*" "?" "{}" "+" "[]" "|" "()" "\\ "

#"."通配符 可以代指除了换行符之外的字符,不过"."只能代指一个东西,一个点代指一个字符
# ret=re.findall("w..l","hello world")
# print(ret)

# "^" 尖角符加了尖角符,就只以最开始的位置匹配
# ret=re.findall(\'^h...o\',"hellodhufduh")
# print(ret)

#"$",代表从结尾开始匹配
# ret=re.findall("h...o$","dfjihhello")
# print(ret)

#"*"重复匹配[0,正无穷)
# ret=re.findall("x.*li","hjkdhjhjdhjjhxionglifhg")#*代表重复前面字符多次
# print(ret)

#"+"重复p匹配[1,无穷大)
# ret=re.findall("x.+li","hjkdhjhjdhjjhxionglifhg")#+代表重复前面字符多次,不过后面代替的字符个数必须大于一
# print(ret)
# ret=re.findall("x.+li","hjkdhjhjdhjjhxlifhg")#+代表重复前面字符多次,不过后面代替的字符个数必须大于一
# print(ret)#[]

#"?"重复匹配[0,1]
# ret=re.findall("a?b","abaadfdbaabaaa")#?代表重复前面字符多次,不过后面代替的字符个数在零到一之间
# print(ret)#[\'ab\', \'b\', \'ab\']

#"{}"重复匹配,次数自定义
# ret=re.findall("a{3}b","abaadfdbasfadfjaaabaaa")#{}代表重复前面字符多次,不过后面代替的字符个数得自定义
# print(ret)#[\'aaab\']
# ret=re.findall("a{1,3}b","abaadfdbasfadfjaaabaaa")#{}代表重复前面字符多次,不过后面代替的字符个数1到3次,不过里面机构有个贪婪匹配性质
# print(ret)#[\'ab\', \'aaab\']
#谈了匹配:在满足条件下的情况,取最多的个数
# 重复匹配结论 *等于[0,正无穷) "+"重复p匹配[1,无穷大) "?"重复匹配[0,1]


#"[]"字符集
# ret=re.findall(\'a[c,d]x\',"acx")#[]里面字符之间有或的关系,可以在里面多选一 #[]取消原字符的特殊功能,除开(\\ ^ -)
# print(ret)
# ret=re.findall(\'a[c,*]x\',"acx")#[]里面的*就不再有重复的意思 #[]取消原字符的特殊功能
# print(ret)
#
# ret=re.findall(\'a[a-z]x\',"acx")#a-z:表示从a到z之间的字符 # []里面字符之间有或的关系,可以在里面多选一
# print(ret)
# ret=re.findall(\'[^t]\',"actx")#尖角号放在[]里面有取反的意思,[]里面有的就除开与里面相同的字符
# print(ret)



#"\\ "反斜杠后面跟元字符去除特殊功能 反斜杠后面跟普通字符实现特殊功能
#\\d匹配任何十进制数,它相当于[0-9]
# print(re.findall(\'\\d(520)\',"hdsjh2154542164119545201631624842556527"))
#\\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匹配一个单词边界,也就是指单词和空格的位置
# print(re.findall(r\'i\\b\',\'idfhd,i an li$st\'))#\\b寻找特殊字符
# print(re.findall(r\'\\bi\',\'$idfhd, i an li$st\'))#\\b寻找特殊字符
# ret=re.findall(r\'\\bblow\',\'blow\')#pyton里面的反斜杠本来就有特殊意义,所以我们必须先用r把\\转意,在把转义后的\\给re赋予特殊意义
# print(ret)



# "()"#分组
# # ret=re.search(\'(?P<xiong>\\d{3})/(?P<li>\\w{3})\',"hjhaadh123fuaaajkdd/kkkjj")
# "|"#有或的意义在里面



#正则表达式的方法
#findall():所有结果都返回到一个列表里面

#匹配出满足条件的第一个结果
# ret=re.search(\'s.b\',"djkdjjksgbsgbjdjsgb")#返回匹配到的第一个对象(object),对象可以调用group()返回结果
# print(ret)
# print(ret.group())#可以用group调用对象里面的值,一般search于group要联用

#match():#只在字符串开始匹配,也只返回一个对象
# ret=re.match("asd","asbfhjkash")
# print(ret)


#split#分割
# "hdjhdsf".split("s")#字符串的split功能
# re.split(\'k\',\'djksal\')#分割
# ret=re.split(\'[j,a]\',\'daddjksal\')#分割,j把字符分成两份,啊a再对分出来的两部分进行分解
# print(ret)#[\'d\', \'dd\', \'ks\', \'l\']


#sub替换
# ret=re.sub("x...g","li","jdkfjdkjfkjxiongjfkljsdklj")
# print(ret)


#compile#多次匹配,相当于做函数
# re.findall(\'\\.com\',"hjfhsdjh.comhfdjhj")#z只能查找一次
# re.compile()#多次匹配,相当于做函数
# obj=re.compile(\'\\.com\')
# ret=obj.findall("hdhfjksdklfj .comdjhfji")
# print(ret)

以上是关于python之re模块的主要内容,如果未能解决你的问题,请参考以下文章

python模块之re模块

python常用模块之re模块(正则)

常用模块之re模块以及正则表达式扩展

python 模块之-re

python之re模块

Python 入门之 内置模块 -- re模块