我的输入文件test.sas
文件如下所示:
My
Name is Joe
How are you?;
/* Comment 1 */
/*Comment 2
blah blah
blah blah blah
blah blah blah blah;*/
/* Comment 3 */
I am great
当我使用以下代码时,得到的结果恰好在代码之后:
writing = True
with open('test.sas', 'r') as file:
with open('output.sas','w') as out:
for line in file:
if writing:
if '/*' in line:
writing = False
else:
out.write(line)
elif '*/' in line:
writing = True
结果:
My
Name is Joe
How are you?;
但是我想得到以下结果:
My
Name is Joe
How are you?;
I am great
我不知道自己在做什么错。基本上,我想删除注释块中的文本,并将其余部分写到输出文件中。
答案 0 :(得分:4)
更改您的决赛
elif '*/' in line:
writing = True
到
if '*/' in line:
writing = True
这样,如果两个语句都在同一行中,则您可以同时命中它们。
答案 1 :(得分:0)
我在每行末尾添加了一些注释,以显示writing
变量的状态。
My //True
Name is Joe //True
How are you?; //True
/* Comment 1 */ //False
/*Comment 2 //False
blah blah //False
blah blah blah //False
blah blah blah blah;*/ //True
/* Comment 3 */ //False
I am great //False
您知道问题出在哪里吗?由于if语句每行只能评估一次(每个循环一次),因此在同时具有writing
和True
的行之后,不会将/*
设置为*/
要在一行上检查两个注释符号,请允许两个if语句在一个循环中工作。在程序末尾将elif '*/' in line:
更改为if '*/' in line
。这样,它可以设置为在每个循环结束时写入,即使它最初将写入设置为False!
答案 2 :(得分:0)
re.sub()方法用于用其他东西“替换匹配项”
re.sub(样式,替换项,字符串)
模式:(/ * [\ s \ S \ w \ W] ** / \ r?\ n?)-捕捉引号之间的所有内容,然后再加上返回或换行符
import re
with open('text.sas') as f:
string = f.read()
pattern = r'(/\*[\s\S\w\W]*\*/\r?\n?)'
new_string = re.sub(pattern, '', string)
print(new_string)
""" Output:
My
Name is Joe
How are you?;
I am great
"""