正则

def func():
    strs='aaabbbcZZZZ'
    s1=''
    s2=''
    from  collections import  Counter
    for i in strs:
        if i.islower():
            s1+=i
        else:
            s2+=i
    s1_c=Counter(s1)
    s2_c=Counter(s2)
    sort_s1=s1_c.most_common()
    sort_s2=s2_c.most_common()
    sort_s1=sorted(sort_s1,key=lambda x:(x[1],-ord(x[0])),reverse=True)
    sort_s2=sorted(sort_s2,key=lambda x:(x[1],-ord(x[0])),reverse=True)
    if sort_s2:
        if sort_s1[-1][1]==sort_s2[0][1]:
            sort_s1+=sort_s2
            print(sort_s1)
            return
        for i ,j in sort_s2:
            for k,l in sort_s1:
                if j>l:
                    sort_s1.insert(sort_s1.index((k,l)),(i,j))
                    break
                elif j==l:
                    if sort_s1[-1][1]==j:
                        sort_s1.append((i,j))
                    continue
                else:
                    if sort_s1[-1][1]==j:
                        sort_s1.append((i,j))
                        break
                    sort_s1.insert(sort_s1.index((k,l)),(i,j))
                    break
        print('jieguo: ',sort_s1)
    else:
        print(sort_s1)
    result=''
    for i , j in sort_s1:
        result=result+ i+':'+str(j)+';'
    print(result.strip(';'))



if __name__ == '__main__':
    func()
    # func2()

规则:
 .       匹配任意1个字符(除了\n)
 []     匹配[]中列举的字符
 \d     匹配数字,也就是0-9
 \D     匹配非数字,也就是匹配不是数字的字符
 \s     匹配空白符,也就是 空格\tab
 \S     匹配非空白符,\s取反
 \w     匹配单词字符, a-z, A-Z, 0-9, _
 \W     匹配非单词字符, \w取反
数量:
 *       匹配前一个字符出现0次多次或者无限次,可有可无,可多可少
 +      匹配前一个字符出现1次多次或则无限次,直到出现一次
 ?       匹配前一个字符出现1次或者0次,要么有1次,要么没有
 {m}     匹配前一个字符出现m次
 {m,}   匹配前一个字符至少出现m次
 {m,n}   匹配前一个字符出现m到n次
注意当要匹配#,或者$需要转译\转译

火星文计算

# x#y = 2*x+3*y+4
# x$y = 3*x+y+2
#4$5 //缺少操作数
# 4$5# //缺少操作数
# 4#$5 //缺少操作数
# 4 $5 //有空格
# 3+4-5*6/7 //有其它操作符
# 12345678987654321$54321 //32位整数计算溢出
def func():
    def getConclude(s):
        s=s.split("$")
        res='3*x+y+2'
        res=res.replace('x',s[0])
        res=res.replace('y',s[1])
        return  eval(res)
    def getConclude1(s):
        s=s.split("#")
        res='2*x+3*y+4'
        res=res.replace('x',s[0])
        res=res.replace('y',s[1])
        return  eval(res)
    inp='123$4$5#67$1'
    import re
    tmp=inp.replace('$','0').replace('#','0')
    if not tmp.isdigit():
        print("非法输入")
        return
    tmp1=inp.replace('$','+').replace('#','+')
    while '$' in inp:
        parttern=re.compile(r'\d+\$\d+')
        findll=re.findall(parttern,inp)
        if not findll:
            print("没有操作数")
            return
        for i in findll:
            num=getConclude(i)
            inp=inp.replace(i,str(num))
    while '#' in inp:
        parttern=re.compile(r'\d+\#\d+')
        findll=re.findall(parttern,inp)
        if not findll:
            print("没有操作数")
            return
        for i in findll:
            num=getConclude1(i)
            inp=inp.replace(i,str(num))
    print(inp)
if __name__ == '__main__':
    func()


全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务