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