题目描述
有一种简易压缩算法:针对全部为小写英文字母组成的字符串, 将其中连续超过两个相同字母的部分压缩为连续个数加该字母 其他部分保持原样不变.
例如字符串aaabbccccd 经过压缩变成字符串 3abb4cd
请您编写解压函数,根据输入的字符串,判断其是否为合法压缩过的字符串
- 若输入合法则输出解压缩后的字符串
- 否则输出字符串
!error
来报告错误
输入描述
输入一行,为一个 ASCII 字符串
长度不超过100
字符
用例保证输出的字符串长度也不会超过100
字符串
eg.
4d3f
输出描述
若判断输入为合法的经过压缩后的字符串
则输出压缩前的字符串
若输入不合法 则输出字符串!error
ddddfff
#简易压缩算法一种字符串压缩表示的解压
import re
s = input()
pat = "[^0-9a-z]"#定义匹配非法字符的正则表达式(非数字和小写字母的字符)
num = ""#用于存放数字
res = ""#用于存放字母
pattern = re.compile(pat)#编译正则表达式
matcher = pattern.search(s)#搜索输入s中是否有非法字符
if matcher:
print("!error")
else:
for i in range(len(s)):
c = s[i]
if c.isdigit():#判断字符是否为数字
num += c#此处if结束返回上述循环,循环继续向下走
elif num != "":
if int(num) <= 2:
print("!error")
break
else:
for j in range(int(num)):
res += c#此时c对应输入’3d‘中的’d‘
num = ""
else:
res += c
print(res)
正则表达式
在代码 matcher = pattern.search(s)
中,pattern
是一个已经通过 re.compile
编译好的正则表达式对象,search
是该对象的一个方法。
pattern.search(s)
的作用是在字符串 s
中查找第一个匹配 pattern
所定义正则表达式模式的位置。如果找到了匹配项,它会返回一个 re.Match
对象(这个对象包含了关于匹配的详细信息,比如匹配的起始位置、结束位置、匹配到的具体文本等)如果没有找到匹配项,则返回 None
。