python学习day12

正则表达式的学习

 

#codeing:UTF-8
#__author__:Duke
#date:2018/3/17/017 23:29
import re

#方法一  findall  全找
ret = re.findall('w\w{2}','hello world')
print(ret)

# 元字符  11个
# .  通配符
ret = re.findall('w..','hello world')  # w..  点点任意指代,一个代指一个字符
print(ret)
ret = re.findall('w.l','hello w\rld')  # w..  点点任意指代,一个代指一个字符
print(ret)   #  不能指代“\"字符

# ^   尖角符
ret = re.findall("^h...o","hjasdfhello")   #只从开始匹配
print(ret)

#  $  dollor  符号
ret = re.findall("d..e$","hjasdukefhflle")   #只从末尾匹配
print(ret)

#  * 重复匹配   [0  无穷)个
ret = re.findall("du*","hjasdukefhfllfdukeeerffrefwegduuuuekw")   #只从末尾匹配
print(ret)

#  + 重复匹配   [1  无穷)个
ret = re.findall("du+","hjasdukefhfllfdkeeerffrefwegduuuuekw")
print(ret)   #至少一个u

# #  + 重复匹配   [1  无穷)个
ret = re.findall("du+","hjasdukefhfllfdkeeerffrefwegduuuuekw")
print(ret)   #至少一个u

#  ?   0或则1个 d
ret = re.findall("d?u","hjasdukefhfllfdkeeerffrefwegduuuuekw")
print(ret)

# { }  在区间内均可
ret = re.findall("du{1,2}","hjasdukefhfllfdkeeerffrefwegduuuuekw")
print(ret)   #贪难匹配,按最多的匹配
# 结论:* =={0,+无穷}   + == {1,+无穷}    ?== {0,1}

# []   字符集
ret = re.findall('a[c,d,e,s,]x','asx')   #是 or 意思
print(ret)

ret = re.findall('[a-z]','asx')   # - 表示范围
print(ret)

#     注意 [] 字符集  :取消元字符的作用、  (  \  ^  - )这三个除外
ret = re.findall('[w,,]','awdx*,')   #  *变为普通字符
print(ret)

ret = re.findall('[^a]','awdx*,')   #  ^  取补集  即为除  a 的元素
print(ret)

ret = re.findall('[^a,w]','awdx*,')   #  []  中的全部元素非  包括,
print(ret)  #['d', 'x', '*']

#  \  斜杠
#斜杠后的元字符 去除特殊功能
#斜杠后的一些普通字符实现特殊功能
#  \d  表示数字  [0,9]
print(re.findall('\d{11}','hqfuhi8712648721485'))   #匹配11个数字
# ['87126487214']
#  \D 表示[^0=9]
print(re.findall('\D{5}','hqfuhi8712648721485'))   #匹配5个字符
# # ['hqfuh']
# #  \s 表示任意空字符]
print(re.findall('\s','hqfu\thi87 1264\r8721485'))
# # ['\t', ' ', '\r']
# #  \S 表示任意非空字符]
print(re.findall('\S','hqfu\thi87 1264\r8721485'))
# ['h', 'q', 'f', 'u', 'h', 'i', '8', '7', '1', '2', '6', '4', '8', '7', '2',
#  \w 表示任意数字  字母  字符]
#  \W 表示任意非数字  字母  字符]
#  \b 表示特殊字符的边界
print(re.findall(r'\bi','hello i an duke'))

  #\+
ret = re.search('a+','aaawdx*,')   #
print(ret.group())  #aaa
ret = re.search('a\+','aaawdx*,')   #
print(ret)  #None

# 两种方法解决标红
ret = re.findall(r'\\','aaawdxD:\c')   #
print(ret)  #['\\']
ret = re.findall('\\\\','aaawdxD:\c')   #
print(ret)  #['\\']

#   用结果理解
ret = re.search(r'\bduke','duke')   #  r表示原生字符串
print(ret.group())  #duke
ret = re.search('\bduke','duke')   #  r表示原生字符串
print(ret)  #None

#  ()做分组   |
print(re.search('(as)+','sdjkasf').group())  #as
print(re.search('(as+)','sdjkasf').group())  #as
print(re.search('(as)|3','sdj3kas3f3').group())  #整体或
print(re.findall('(as)|3','sdj3kas3f3') ) #['', 'as', '', '']

# #用于文件路径
ret = re.search('(?P<id>\d{3})/(?P<name>\w{3})','dghwwweeejyaf123/ooo')
print(ret.group())
print(ret.group('id'))
print(ret.group('name'))

# 二:re  的方法
#findall()  :返回全部的结果,以list的形势
# re.search()  :返回一个对象 ,对象通过 group方法返回结果
# re.match()   只在字符串开始开始匹配  ,返回的也是一个对象  group
# re.split()  :
print(re.split('[k,s]','dukehsijik'))   #这个很重要
print(re.split('[k,s]','dskehsijik'))   #注意这个的分法

#sub()  替换
print(re.sub('d..e','haha','jiewjfrewdukeshjs'))
principle= re.compile('d..e')  #编译规则
ret = principle.findall('iewjfrewdukeshjs')
print(ret)   #['duke']

 

posted @ 2018-03-18 14:07  Duke777  阅读(180)  评论(0编辑  收藏  举报