re模块

#!/usr/bin/python3
# -*- coding:utf-8 -*-
#Author:qika


s="hello world"

#字符串一般的基本操作:查找、替换、分隔
# print(s.find("llo"))#查找某字符
# ret =s.replace("ll","xx")#替换某值为某值
# print(ret)
# print(s.split("w"))#以什么为中间分隔线,分隔为两端



#正则表达式
#匹配-->字符串的


#re 模块使 Python 语言拥有全部的正则表达式功能。re模块有3个可使用的方法:

# re.findall方法
# 作用:
# 在字符串中找到正则表达式所匹配的"所有子串",返回一个列表
# 如果没有找到匹配的,则返回空列表

#re.match函数
#作用:
# 从字符串的起始位置匹配一个,
# 如果不是起始位置匹配成功的话,match()就返回none

# re.search方法
# 作用:
# 扫描整个字符串并返回第一个成功的匹配。返回一个对象,对象可以调用group()返回结果



#下面是使用格式和一些常用方法:
# 语法格式为:
# re.findall(pattern, string, flags=0)
#
# pattern.findall(string[, pos[, endpos]])
# 参数:
# pattern 匹配模式。
# string 待匹配的字符串。
# pos 可选参数,指定字符串的起始位置,默认为 0。
# endpos 可选参数,指定字符串的结束位置,默认为字符串的长度。
#例:
import re
# res = re.findall("qika","qwqikaeqweqweqika123asdqwkeqweqweq")
# print(res)#返回结果:['qika']--->>完全匹配


#重要的2元字符:
#  . 一个点:
# 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
# res=re.findall("w.d","hello  wod")
# print(res)  #打印结果:['wod'],一个点.只能代替一个字符

#   ^ 一个向上的尖符号:匹配字符串的开头
# res=re.findall("^he...","hello  wod")
# print(res)#返回结果:['hello']-->使用^尖角符号匹配he开头的,三个点表示匹配he后面任意三个字符



#  $   匹配字符串的末尾
# res=re.findall(".....qika$","helloqika")
# print(res)#结果:['helloqika']--->$符号表示匹配qika结尾的字符串,前面五个点表示匹配任意五个字符,只要结尾是qika的就可


#  *  匹配0个或多个
# res=re.findall("ab*","abcdefgaba")
# print(res)#结果:['ab', 'ab', 'a']--->* 即表示匹配前面给出字符所有的字符结果,只要有

# +  匹配1个或多个
# res=re.findall("ab+","abcdefgasasqq")
# print(res)#结果:['ab']  -->+表示找满足前面的一个或多个,否则返回空列表

#  ?  匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
# res=re.findall("b?c","aaabbcdefgasasqq")
# print(res)#结果:['bc']  -->b?c 表示匹配?问号前面的b且后面是c的,那么只有一个满足

#  {}   匹配n个前面表达式
# res =re.findall("a{3}b","aaaaaaaaaaaab")#最多3个
# res =re.findall("a{1,3}b","aaaaaaaaaaaab")#1到3个
# print(res)  #结果:['aaab']------>{}大括号,表示按照括号里面最大数字来匹配前面的字符


#==========================================
#总结一下:推荐使用这三个!!!
# *(0或多个)
# +(1或多)
# ?(0或1)





#  []  字符集
# res=re.findall("a[a,c]b","acb")
# print(res)#['acb']   -->表示用[]里面的内容去匹配字符内容,匹配到并返回
# res=re.findall("[1-9,a-z,A-Z]","123abAB")
# print(res)#['1', '2', '3', 'a', 'b', 'A', 'B']

#另:如果一个尖角符号加上中括号[],就是取反!!!
# res=re.findall("[^he]","helloworld")
# print(res)#['l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']   尖角符号加上中括号[],作用:取反


#  \
#反斜杠 后面跟元字符,去除特殊功能
#反斜杠 后面跟普通字符,实现特殊功能

# \d  匹配任何十进制数,相当于[0-9]
# \D  匹配任何非数字字符,相当于[^0-9]
# \s  匹配任何空白字符,相当于[ \t\n\r]
# \S  匹配任何非空白字符,相当于[^ \t\n\r]
# \w  匹配任何字母数字字符,相当于[a-zA-Z0-9]
# \W  匹配任何非字母数字字符,相当于[^a-zA-Z0-9]
# \b  匹配一个特殊字符的边界,相当于指单词和空格间的位置(如果是普通字符那么就匹配不到)

#实例:
# print(re.findall("\d{3}","123aaaqwed"))  #\d{3}  指匹配任何三位十进制数
# print(re.findall("\sabc","abc def"))
# print(re.findall("\w","abc123"))   #直接使用\w   表示匹配所有字符数字字符['a', 'b', 'c', '1', '2', '3']

# print(re.findall(r"I\b","hello world,I am fine"))
#结果:# ['I']
# 原因:\b放要匹配的字符前或者后,则需看前后是什么字符:
# 是普通的字符aA1这些,那么就匹配不到,
# 如果是空格,或者其他#$%这些特殊符号,那么就可以正常匹配到


##############################

# |
# ()

# print(re.search("(as)+","asaswefwf").group())#re.search  匹配第一个符合的

#例:
# res = re.search("(?P<id>\d{3})","weeew34ttt123/ooo")
# print(res.group())
# print(res.group("id"))#结果:123   --->>必须跟上.group()表示分组输出
#另:(?P<id>\d{3})   这是固定格式,其中的?P<id> 表示自己命名,主要还是看\d{3}
#因为如果要给取出的值命名,那就这样做

 

posted on 2020-12-17 22:28  QiKa  阅读(72)  评论(0编辑  收藏  举报