正则练习
import re
# 一
s = "asdfjvjadsffvaadfkfasaffdsasdffadsafafsafdadsfaafd"
# 查找字符串中有多少个af
ret = re.findall(r"af", s)
print(len(ret))
# 二
s = "abDEe23dJfd343dPOddfe4CdD5ccv!23rr"
# 取出字符串中的所有字母
ret = re.findall(r"[a-zA-Z]", s)
print(ret)
# 三
s = "zhangsan lisi wangwu"
# 规则是按照空格出现一次或者多次切割
ret = re.split(r"\s+", s)
print(ret)
# 四
s = "c:\\abc\\a.txt"
# 用正则\\切割
ret = re.split(r"\\", s)
print(ret)
# 五
s = "wer8934605juo123wa89320571f"
# 将连续5个以上数字替换成#
ret = re.sub(r"\d{5,}", '#', s)
print(ret)
# 六
s = "cudddbhuuujddd"
# 将多个重复字母替换成&
# \1 表示和第一个 () 中的值是一样的, \2 表示和第二个组的值是一样的。。。。
ret = re.sub(r"([a-z])\1+", '&', s)
print(ret)
# 七
s = "min tian jiu yao fang jia le ,da jia"
# 获取长度为3个字母的单词
ret = re.findall(r"\b\w{3}\b", s)
print(ret)
s = 'THREE people at HERE do some THING'
# 找出以字母e结尾的单词,忽略大小写
ret = re.findall(r"\b\w+e\b", s, re.I)
print(ret)
# 二
s = "cudddbhuuujddd"
# 将多个重复字母替换成一个字母(比如ddd替换成d)
ret = re.sub(r"([a-z])\1+", r"\1", s)
print(ret)
# 三
s = "我我...我我...我要..要要...要要...学学学...学学...编编编..编程..程.程...程...程"
# 将字符串变成 '我要学编程'
ret = re.sub(r"\.+", "", s)
ret = re.sub(r"(.)\1+", r"\1", ret)
print(ret)
# 四
s = """
<div>
<div>
<img src='1.png'>
<img src='2.png'>
<img src='3.png'>
<img src='4.png'>
<img src='5.png'>
<img src='6.png'>
</div>
<div>
<img src='11.png'>
<img src='22.png'>
<img src='33.png'>
<img src='44.png'>
<img src='55.png'>
<img src='66.png'>
</div>
</div>
"""
ret = re.search(r"<div>\s+<div>(.+?)</div>", s, re.S)
print(ret.group(1))
#
# 找出
# <img src='1.png'>
# <img src='2.png'>
# <img src='3.png'>
# <img src='4.png'>
# <img src='5.png'>
# <img src='6.png'>
#
#
#
# 五
s = "<div class='a'>正则<span>表达式</span><b style='color:red'>练习</b></div>"
# 去掉div和b标签
# 结果: 正则<span>表达式</span>练习
ret = re.sub(r"</?div.*?>|</?b.*?>", "", s)
print(ret)
# 六
# 你要怎样匹配姓Nakamoto的名字?
# 我们假定名字在姓前面出现,姓和名第一个字母大写。
# 下面的这些要被匹配:
# Satoshi Nakamoto,
# Alice Nakamoto,
# Robocop Nakamoto;
# 而下面这些不能被匹配:nulu Nakamoto(名字首字母没有大写)
# Mr. Nakamoto(Mr.是称号,类似的Dr. Ms. Mrs.之类的都不行)
# Nakamoto(没写名字)
# Satoshi nakamoto(姓第一个字母没有大写)
#
#
#
s = """
Satoshi Nakamoto
satoshi Nakamoto
Alice Nakamoto
Mr. Nakamoto
Robocop Nakamoto
Nakamoto
Satoshi nakamoto
"""
# 把符合名字的单词找出来
ret = re.findall(r"[A-Z]\w+ Nakamoto", s)
print(ret)
#
# 七
s = """121fefe
3qsqse2
ded6d32
aaaaa1a
1234adc
"""
# 找出每行中只有3个数字的字符串
# 结果:
# 121fefe
# ded6d32
ret = re.findall(r"^\D*\d\D*\d\D*\d\D*$", s, re.M)
print(ret)