我正在尝试创建一个可以删除*或!的程序从行开始,如果他们以所述字符开头。因此,像:
controllerInstance.run((Runnable) () -> { /*no return*/ }); // calls run(Runnable command)
controllerInstance.run((Callable) () -> { return null; }); // calls run(Callable command)
会改为:
*81
!81
这是我现在使用的代码:
81
81
但是,只会删除星星,这有什么问题?
答案 0 :(得分:0)
您的布尔条件不正确,您需要在所有条件下进行测试,并在第一个and
if
if line.startswith("!") == False and line.startswith("*") == False:
...
或者更好,使用not
if not (line.startswith("!") or line.startswith("*")):
...
更好的是,提取您感兴趣的令牌并根据排除列表进行检查
with open("Test.txt",'r') as c:
lines = c.readlines()
with open("Test.txt",'w') as c:
for line in lines:
if line[0] in "*!":
line = line[1:]
c.write(line)
答案 1 :(得分:0)
使用正则表达式替换的解决方案:
import re
with open("Test.txt",'r+') as c:
inp = c.read()
out = re.sub(r'^([\*!])(.*)', r'\2', inp, flags=re.MULTILINE)
c.seek(0)
c.write(out)
c.truncate()
注意,上面的正则表达式只会替换前导'*'或'!'。因此,以
之类的任何字符组合开头的行*!80
!*80
**80
将被
取代!80
*80
*80
替换所有领先的'*'和'!'在以字符开头的行上,将模式更改为
'^([\*!]+)(.*)'