函数
(一)findall()函数
若找的到则返回一个包含所有匹配项的列表,找不到返回一个空列表
import re
txt="干饭使我快乐!干饭人!干饭魂!"
x=re.findall("干饭",txt)
print(x)
//['干饭', '干饭', '干饭']
(二)search()函数
搜索匹配项,找到则返回第一次出现匹配项的位置,未找到则返回None
import re
txt="阿巴阿巴 真厉害 嘿嘿"
x=re.search("\s",txt)
print(x.start())
//4
import re
txt="阿巴阿巴 真厉害 嘿嘿"
x=re.search("康师傅",txt)
print(x)
//None
(三)split()函数
返回一个列表,其中的字符串在每次匹配时都被拆分
//例:在每个空白字符处拆分
import re
txt="嗷呜嗷呜 耶比耶比 嘎嘎嘎"
x=re.split("\s",txt)
print(x)
//['嗷呜嗷呜', '耶比耶比', '嘎嘎嘎']
——————————————————————————————————————————————————————————
// "1"为拆分次数
import re
txt="嗷呜嗷呜 耶比耶比 嘎嘎嘎"
x=re.split("\s",txt,1)
print(x)
//['嗷呜嗷呜', '耶比耶比 嘎嘎嘎']
(四)sub()函数
用于选择的文本替换匹配项
import re
txt="我在春日里等你"
x=re.sub("春","冬",txt)
print(x)
//我在冬日里等你
//控制次数
import re
txt="我一把把把把住了"
x=re.sub("把","嘿",txt,2)
print(x)
//我一嘿嘿把把住了
元字符
(一)列表符号
import re
txt="i have an csdn treasure"
x=re.findall("[a-m]",txt)
#按字母顺序查找"a"和"m"之间的所有小写字符
print(x)
#['i', 'h', 'a', 'e', 'a', 'c', 'd', 'e', 'a', 'e']
(二)转义符
import re
txt="今天打6把麻将赢了1杯奶茶"
#查找所有数字
x=re.findall("\d",txt)
print(x)
#['6', '1']
(三)任意符号
import re
txt="组成原理 好难学"
#以"组"开头,后跟两个任意字符和一个"理"的序列
x=re.findall("组..理",txt)
print(x)
#['组成原理']
(四)开始(^)与结束符($)
import re
txt="组成原理真的 很难学啊"
x=re.findall("^组",txt)
print(x)
#['组']
if x:
print("确实很难学啊,呜呜呜")
#确实很难学啊,呜呜呜
y=re.findall("啊$",txt)
if y:
print("好难学啊好难学啊")
#好难学啊好难学啊
y=re.findall("很..啊$",txt)
if y:
print("好难学啊好难学啊")
#好难学啊好难学啊
(五)星号符
匹配字符零次或多次出现
import re
txt="为什么学组成原理,这么难学还要学组成原理啊"
x=re.findall("组成原理*",txt)
print(x)
if x:
print("不学了,摆烂")
else:
print("给老子学")
#['组成原理', '组成原理']
#不学了,摆烂
(六)加号符
用于匹配一次或多次出现
import re
txt = "白卷卷是个大懒虫,她不给我送充电器"
x = re.findall("充电器+", txt)
print(x)
if x:
print("对,她好懒!")
else:
print("不对,她非常懒")
#['充电器']
#对,她好懒!
(七)集合符号
{}指定恰好出现的次数
import re
txt="蔡蔡说她还想再读一年"
x=re.findall("蔡{2}",txt)
print(x)
if x:
print("她是个大傻杯")
else:
print("她是个大二比")
(八)或符
"|"匹配两者任一
import re
txt="蔡蔡说她不想帮我学习强国,她是坏蛋"
x=re.findall("蔡蔡|坏蛋",txt)
print(x)
if x:
print("她可真是大坏蛋")
else:
print("啊对对对")
#['蔡蔡', '坏蛋']
#她可真是大坏蛋
特殊序列
(一)指定字符
\A:匹配以指定字符开头的字符,如果位于字符串的开头,则返回匹配项
import re
txt="蔡蔡说她还是想回诸城"
x=re.findall("\A蔡",txt)
print(x)
if x:
print("她有病吧!!")
else:
print("她真的是!!")
#['蔡']
#她有病吧!!
(二)指定开头结尾
\b返回指定字符位于单词开头或结尾的匹配项
r确保字符串被视为原始字符串
import re
txt="蔡蔡她说我有双下巴,她是二壁吧!"
x=re.findall(r"\b蔡蔡",txt)
print(x)
if x:
print("啊对对对")
else:
print("阿巴阿巴")
#['蔡蔡']
#啊对对对
(三)匹配中间字符
\B 返回指定字符不在开头或者结尾的匹配项
import re
txt="蔡蔡她不想搭理我了,阿巴阿巴"
x=re.findall(r"\B搭理",txt)
y=re.findall(r"\B蔡蔡",txt)
print(x)
print(y)
if x:
print("嘿嘿嘿")
else:
print("哈哈哈")
if y:
print("蔡蔡骂我")
else:
print("蔡蔡凶我")
#['搭理']
#[]
#嘿嘿嘿
#蔡蔡凶我
(四)匹配数字
\d返回字符串包含数字的匹配项
import re
txt="蔡蔡好像又秃了,头发还有1,2,3……"
x=re.findall("\d",txt)
print(x)
if x:
print("嗝儿")
else:
print("哈哈哈")
#['1', '2', '3']
#嗝儿
(五)匹配非数字
\D返回字符串不包含数字的匹配项
import re
txt="蔡蔡好像又秃了,头发还有1,2,3……"
x=re.findall("\D",txt)
print(x)
if x:
print("她承认了啊哈哈哈哈")
else:
print("呜呜呜,她骂我")
#['蔡', '蔡', '好', '像', '又', '秃', '了', ',', '头', '发', '还', '有', ',', ',', '…', '…']
#她承认了啊哈哈哈哈
(六)空格匹配
\S返回字符串不包含空格字符
\s返回一个匹配字符串包含空白空间字符的匹配项
import re
txt="蔡蔡让我去厕 所吃 饭"
x=re.findall("\s",txt)
y=re.findall("\S",txt)
print(x)
print(y)
if x:
print("撒孜然")
else:
print("草莓酱")
#[' ', ' ']
#['蔡', '蔡', '让', '我', '去', '厕', '所', '吃', '饭']
#撒孜然
(七)匹配任意数字和字母
\w返回一个匹配,其中字符串包含任何单词字符(从a到z的字符,从0-9的数字,以及下划线_)
\W匹配任意非数字和字母
import re
txt="蔡蔡是大坏蛋,她大半夜吃东西 不让我吃!!"
x=re.findall("\w",txt)
print(x)
if x:
print("蛋挞")
else:
print("芝麻酱饼")
#['蔡', '蔡', '是', '大', '坏', '蛋', '她', '大', '半', '夜', '吃', '东', '西', '不', '让', '我', '吃']
#蛋挞
(八)匹配结尾
import re
txt="同意把蔡蔡抓进去的举手"
x=re.findall("手\Z",txt)
print(x)
if x:
print("我我我我我我我")
else:
print("都举!!!")
#['手']
#我我我我我我我
指定符范围匹配
集合
import re
txt="蔡蔡故意馋我,蔡蔡还跟阿姨告状,蔡蔡好坏"
x=re.findall("[蔡蔡]",txt)
print(x)
if x:
print("同意")
else:
print("附议")
#['蔡', '蔡', '蔡', '蔡', '蔡', '蔡']
#同意
匹配任意范围内小写字母(好像写过了?)
import re
txt="hel lo wo r ld"
x=re.findall("[a-n]",txt)
print(x)
if x:
print("耶比耶比")
else:
print("阿巴阿巴")
#['h', 'e', 'l', 'l', 'l', 'd']
#耶比耶比
匹配对象
search() 返回一个Match对象
import re
txt="解封了好开心"
x=re.search("好开",txt)
print(x)
#<re.Match object; span=(3, 5), match='好开'>
#span()返回一个包含匹配开始和结束位置的元组
#返回字符串中匹配的部分
print(x.group())
#好开
match用法
pattern.match()方法:
*语法: match(string=None, pos=0, endpos=9223372036854775807, , pattern=None)
函数作用:从字符串string的pos位置匹配pattern到endpos位置,成功返回Match对象,未成功返回None
import re
p = re.compile(r'\d+')#用于匹配至少一个数字
#不指定匹配区间
m1 = p.match('123abc')
if m1:
print('匹配的内容为:',m1.group())
else:
print('没有匹配的内容')
#指定匹配区间
m2 = p.match('123abc',2)
if m2:
print('匹配的内容为:',m2.group())
else:
print('没有匹配的内容')
#指定匹配区间,结束位置超过字符串长度,不会报错
m3 = p.match('123abc',2,10)
if m3:
print('匹配的内容为:',m3.group())
else:
print('没有匹配的内容')