这是输入:
%%timeit
10<=11
47.7 ns ± 0.211 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
%%timeit
10<11
48.5 ns ± 0.362 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
这是想要的输出:
10<=11
47.7 ns
10<11
48.5 ns
这是表达式:
r=re.sub('(%%timeit\n)|\n\n(?=\d)|( ±.*\))','',s)
顺便提一下这个:
r=re.sub('(%%timeit\n)|(\n(?=\S))','',s)
print('处理结果:\n%s'%r)
决不能是
r=re.sub('[%%timeit\n][\n(?=\S)]','',s)
r=re.sub('[%%timeit\n]|[\n(?=\S)]','',s)
r=re.sub('[(%%timeit\n)|(\n(?=\S))]','',s)
python - 啃书 第八章 正则表达式
原理,我开始写错过,以为两种匹配干扰了操作,之后发现是括号的原因,结论就是绝不能用方括号,全程圆括号,方括号是[A-Z]或[^A-Z]时用到的,是括住的内容任意一个元素的意思。
时间长了,忘了怎么写,于是绕了一大圈,改了好几次,算是写出来了!
删除(替换)的原理,将语句换长findall,去掉替换词,秒懂。
是先将符合规则的片段都先找出来,然后一并替换掉,因为替换是一次性操作,并没有规则相互干扰之说,但如果强行写个可能会相互干扰的规则组
例如加入跨越规则的规则:
(each[\n%)]*.*\n\d*)
import re
s='%%timeit\n10<=11\n\n\n47.7 ns ± 0.211 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)\n\n%%timeit\n10<11\n\n\n48.5 ns ± 0.362 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)'
r=re.sub('( ±.*\))|(each[\n%)]*.*\n\d*)','',s)
print('处理结果:\n%s'%r)
这段代码中,有第一个规则的存在,第二个规则是不生效的,无论二者顺序如何。
import re
s='%%timeit\n10<=11\n\n\n47.7 ns 0.211 ns per loop (mean std. dev. of 7 runs, 10000000 loops each)\n\n%%timeit\n10<11\n\n\n48.5 ns ± 0.362 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)'
r=re.sub('( ±.*\))|(each[\n%)]*.*\n\d*)','',s)
print('处理结果:\n%s'%r)
如果去掉字符串中,第一段的两个±,一切瞬间明了。
因为规则1会把规则2的触发条件弄消失,所以规则2无法触发。那为什么不是规则2把规则1弄的无法触发呢,大概是这样的,re处理规则时,流程其实是字符串顺序,当规则1触发后,符合规则1的字符串就全部跳过(findall),所以就无法触发规则2。
import re
def l():
'耗时在末尾行'
s=input('输入要处理的字符串:\n')
r=re.sub('(%%timeit\n)|\n\n(?=\d)|( ±.*\))','',s)
print('处理结果:\n%s'%r)
def s():
'耗时在末行后'
s=input('输入要处理的字符串:\n')
r=re.sub('(%%timeit\n)|( ±.*\n)|( ±.*)','',s)
r=re.sub('\n\n\n',' # ',r)
print('\n处理结果:\n%s'%r)
def ss():
'按照耗时排序'
s=input('输入要处理的字符串:\n')
s1=re.sub('\n\n\n(?=.*±)|( ±.*\\n\n)','#-#',s)
s2=re.sub('(%%timeit\n)|( ±.*\)$)','',s1)
l=s2.split('#-#')
d={}
for i in range(1,len(l),2):
if re.search('s|ns|µs|ms|min',l[i]):
d[l[i-1]]=l[i]
else:
print('序列出错,未达到期望效果:l[%i] %s'%(i,l[i]))
break
ls=sorted(d.items(),key=lambda x:x[1])
print('\n按照耗时排序:')
for i in ls:
print(i[0]+' # '+i[1])