正则
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()