问题: 实现一个名为stripComments(code)的Python函数,其中code是一个带有包含Python代码的字符串的参数。函数stripComments()返回删除了所有注释的代码。
我有:
def stripComments(code):
code = str(code)
for line in code:
comments = [word[1:] for word in code.split() if word[0] == '#']
del(comments)
stripComments(code)
我不确定如何专门告诉python搜索字符串的每一行,当它找到一个hashtag时,删除该行的其余部分。 请帮忙。 :(
答案 0 :(得分:4)
您可以通过re.sub
函数实现此目的。
import re
def stripComments(code):
code = str(code)
return re.sub(r'(?m)^ *#.*\n?', '', code)
print(stripComments("""#foo bar
bar foo
# buz"""))
(?m)
启用多线模式。 ^
声称我们刚开始。 <space>*#
匹配开头的字符#
,前后有空格。 .*
匹配除换行符以外的所有字符。用空字符串替换那些匹配的字符将为您提供删除注释行的字符串。
答案 1 :(得分:1)
def remove_comments(filename1,filename2): msgstr“”“从filename1中删除以#开头的所有注释并写入 结果到filename2 “”“
with open(filename1, 'r') as f:
lines = f.readlines()
with open(filename2, 'w') as f:
for line in lines:
# Keep the Shebang line
if line[0:2] == "#!":
f.writelines(line)
# Also keep existing empty lines
elif not line.strip():
f.writelines(line)
# But remove comments from other lines
else:
line = line.split('#')
stripped_string = line[0].rstrip()
# Write the line only if the comment was after the code.
# Discard lines that only contain comments.
if stripped_string:
f.writelines(stripped_string)
f.writelines('\n')