如何从字符串中删除“#”注释?
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')
问题: 实现一个名为 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')