正则表达式

函数

(一)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('没有匹配的内容')
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值