如何从字符串中删除“#”注释?

How to remove '#' comments from a string?

问题: 实现一个名为 stripComments(code) 的 Python 函数,其中 code 是一个参数,它接受一个包含 Python 代码的字符串。函数 stripComments() returns 删除了所有注释的代码。

我有:

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 搜索字符串的每一行,并在找到主题标签时删除该行的其余部分。 请帮忙。 :(

您可以通过 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>*# 匹配开头的字符 #,前面有或没有空格。 .* 匹配除换行符之外的所有字符。用空字符串替换那些匹配的字符将为您提供删除注释行的字符串。

def remove_comments(filename1, filename2):
    """ Remove all comments beginning with # from filename1 and writes
    the result to 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')