程序收到一段如下文本:
v=0
o=RTSP Session 00 IN IP4 0.0.0.0s=Media Server
c=IN IP40.0.0.0t=o o
a=control:-
a=packetization-supported:DH
rn=video 0 RTP/AVP 96
a=control trackID
a=framerate:25.000000
检验这段文本是否满足如下条件∶
1)除空白行外,每行都有一个等于号;2)紧挨着等于号的左右两边都不存在空格;
3)等于号左边只允许存在一个字母.其中v、o、s有且只有一个, m至少有一个. a的个数不能比m个数少.其他字母不做限制。
请写一段代码校验文本是否符合规定的所有条件。
str1 = """v=0
o= RTSP Session 00 IN IP4 0.0.0.0s=Media Server
c=IN IP40.0.0.0t=o o
a=control:-
s=packetization-supported:DH
a=control trackID
m=framerate:25.000000"""
import re
first_word = re.compile(r'^([a-zA-Z])=( ?)')
def check(text):
word_list = []
line_list = text.split('\n')
try:
for line in line_list:
if line: # 忽略空行,当行有内容时按照正则内容匹配
# 使用正则匹配每一行内容
line_content = first_word.findall(line)
if line_content[0][1]:
# 判断=后面是否有空格字符
raise Exception(f'{line} 不符合规则,=右边有空格')
word_list.append(line_content[0][0])
# 将每行第一个字母加入word_list做数量统计
v, o, s, m, a= word_list.count('v'), word_list.count('o'), word_list.count('s'), word_list.count('m'), word_list.count('a')
if v==o==s==1 and a>=m and m >=1:
print('数据符合规则')
else:
raise Exception('数据不符合规则,计数不符合要求')
except Exception:
raise Exception('数据不符合规则') # 捕获正则匹配后切片处理异常
check(str1)