浅谈正则表达式一

Posted jb9527

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈正则表达式一相关的知识,希望对你有一定的参考价值。

‘‘‘
正则表达式作用:判断一个字符串是否匹配给定的格式:例如判断用户注册账号是否满足格式,抓取页面链接等。

‘‘‘
import re #使用正则表达式需要导入re模块
st = "[email protected]"
st1 = re.findall(r^[a-zA-Z0-9][email protected][a-zA-Z0-9]+.com$,st) #前面为匹配的规则,后面为原始字符串
print(st1)
#findall方法:在字符串中找到正则表达式所匹配的所有字符串,以列表形式返回,如果没有找到,返回空列表。
st2 = "小姐姐正在吃东西,小姐姐样子好可爱。"
st3 = re.findall("小姐姐",st2)
print(st3)

#match方法:从字符串起始位置匹配,匹配成功,返回一个匹配对象(对象中包含了匹配到的信息),匹配不成功,match()返回为空
st4 = re.match("小姐姐",st2)#注意match方法只能匹配一个
print(st4) #<re.Match object; span=(0, 3), match=‘小姐姐‘>

#search方法:扫描整个字符串,匹配成功,返回一个匹配对象,只能匹配一个。
st5 = re.search("小姐姐",st2)
print(st5)

#sub替换方法:
st6 = re.sub("小姐姐","狗狗",st2)
print(st6) #狗狗正在吃东西,狗狗样子好可爱。

#-----------------------元字符------------------------------------
‘‘‘
什么是元字符:本身具有特殊含义的字符。
常用元字符:
.:指通配符,代表任意一个字符
[]:通常用来匹配一个字符集,匹配[]中列举的字符.
^:匹配以什么开始的字符串
$:匹配以什么结尾的字符串
*:匹配一个字符出现0次或者无限次
+:匹配前一个字符出现1次或者无限次
?:匹配前一个字符出现0次或者1次,即要么有1次,要么没有
{m}:匹配前一个字符出现m次
{m,n}:匹配前一个字符出现m到n次
:反斜杠后边跟元字符去除特殊功能
反斜杠后边跟普通字符实现特殊功能
d:匹配任何十进制数,相当于类[0-9]
re.findall("d","ww3361gg")也可以写为re.findall("[d]","ww3361gg")
结果为:[‘3‘,‘3‘,‘6‘,‘1‘]
D:匹配任何非数字字符,相当于类[^0-9]
w:匹配任何字母数字字符相当于[a-zA-Z0-9]
re.findall("w","wwww.5362.ew")
结果为:[‘w‘,‘w‘,‘w‘,‘w‘,‘5‘,‘3‘,‘6‘,‘2‘,‘e‘,‘w‘]
W:匹配任何非字母数字字符相当于[^a-zA-Z0-9]
:匹配任何一个单词边界
B:匹配非单词边界
(ab):将括号中字符作为一个分组
...
‘‘‘
# -----------------元字符.的使用-------------------------------
st1 = "丽萨在吃汉堡"
s = re.findall(r丽萨.,st1)
print(s) #[‘丽萨在‘]

#----------------元字符[]的使用---------------------------------
st2 = "I love you"
s = re.findall(r"[love]",st2)
print(s)  #[‘l‘, ‘o‘, ‘v‘, ‘e‘, ‘o‘]

st3 = "露西 is eating apple"
s = re.findall(r"[a-z]",st3)
print(s)#[‘i‘, ‘s‘, ‘e‘, ‘a‘, ‘t‘, ‘i‘, ‘n‘, ‘g‘, ‘a‘, ‘p‘, ‘p‘, ‘l‘, ‘e‘]

# ------------------------元字符*的使用-------------------------
st = "ac"
st1 = re.findall(r"ab*c",st)
print(st1) #[‘ac‘] 0次也可以匹配到

st = "abbbbc"
st1 = re.findall(r"ab*c",st)
print(st1) #[‘abbbbc‘]

#-------------------------元字符+的使用-------------------------
st = "ac"
st1 = re.findall(r"ab+c",st)
print(st1) #[] 0次匹配不到

st = "abbbbc"
st1 = re.findall(r"ab+c",st)
print(st1) #[‘abbbbc‘]

# -------------------元字符?的使用-----------------------------
st = "abbbbc"
st1 = re.findall(r"ab?c",st)
print(st1) #[]

#--------------------元字符{m}的使用---------------------------
st = "abbbbc"
st1 = re.findall(r"ab{3}c",st)
print(st1) #[]

st = "abbbbc"
st1 = re.findall(r"ab{4}c",st)
print(st1) #[‘abbbbc‘]

#------------------元字符{m,n}的使用---------------------------
st = "abbbbc"
st1 = re.findall(r"ab{1,4}c",st)
print(st1) #[‘abbbbc‘]

st = "abbbbc"
st1 = re.findall(r"ab{1,5}c",st)
print(st1) #[‘abbbbc‘]

st = "abbbbc"
st1 = re.findall(r"ab{,6}c",st)
print(st1) #[‘abbbbc‘]

st = "abbbbc"
st1 = re.findall(r"ab{4,}c",st) #最少四次到无限次
print(st1) #[‘abbbbc‘]

#----------------元字符^的使用--------------------
st = "abbc abbdr abbea"
st1 = re.findall(r"^abb",st)
print(st1)#[‘abb‘]


#-----------------元字符$的使用--------------------
st = "abbc abbdr abbea"
st1 = re.findall(r"ea$",st)
print(st1)#[‘ea‘]

#---------------元字符的使用--------------------
st = "abbc abbdr abbea"
st1 = re.findall(r"abb",st)
print(st1)#[‘abb‘, ‘abb‘, ‘abb‘]

#----------------元字符B的使用-------------------
st = "abbc abbdr abbea"
st1 = re.findall(r"Bbb",st)
print(st1)#[‘bb‘, ‘bb‘, ‘bb‘]

#----------------元字符的用法-------------------
st = "小姐姐正在吃东西,小姐姐好可爱,小姐姐吃饱了"
st1 = re.findall(r"小姐姐?",st) #之前?代表匹配前一个字符出现0次或者1次,即要么有1次,要么没有,加了r防转义。
print(st1) #会把满足要求的都获取到[‘小姐姐‘, ‘小姐姐‘, ‘小姐姐‘]

#--------------------贪婪与非贪婪匹配-------------
st = "aaabbbbaaaabbbaaaaaabbb"
st1 = re.findall(r"a{2,4}",st) #正常模式-贪婪匹配
print(st1) #[‘aaa‘, ‘aaaa‘, ‘aaaa‘, ‘aa‘]

st = "aaabbbbaaaabbbaaaaaabbb"
st1 = re.findall(r"a{2,4}?",st) #非贪婪匹配,匹配最短的aa。
print(st1) #[‘aa‘, ‘aa‘, ‘aa‘, ‘aa‘, ‘aa‘, ‘aa‘]

 

以上是关于浅谈正则表达式一的主要内容,如果未能解决你的问题,请参考以下文章

浅谈JavaScript -- 正则表达式

浅谈正则表达式

浅谈正则表达式(上)

浅谈正则表达式

浅谈正则表达式一

第1670期浅谈正则表达式原理