gpt4 book ai didi

python - 使用 Python 查找源代码中不在注释内的所有字符串

转载 作者:行者123 更新时间:2023-11-28 22:21:57 25 4
gpt4 key购买 nike

我有一个类似 C 的源代码,我正在尝试提取此源代码中的所有字符串并将其保存到列表中,而不包括注释中的字符串。此源代码中的字符串可以包含任何字符、空格甚至注释。

例子:

// this is an inline comment with the name "Alpha 1"

string x = "Alpha 2";
/** this is a block comment with the string "Alpha 3" */
foo("Alpha 4");
string y = "Alpha /* */ 5 // with comments";

输出:

["Alpha 2", "Alpha 4", "Alpha /*  */ 5 // with comments"]

我不能使用正则表达式的问题,因为我可以在给定的字符串(这是有效的)中包含注释,当然我可以在内联注释或 block 注释中包含字符串。

我使用此方法获取代码中的所有字符串:

re.findall(r'\"(.+?)\"', code)

但它也给了我注释中的字符串。

有什么帮助吗?

最佳答案

如果语言像您描述的那样简单,我想我会手写解析器。我仍然会使用正则表达式来标记输入。

给你:

import re
from itertools import takewhile


def extract_strings(source):
def consume(it, end):
return list(takewhile(lambda x: x != end, it))
tokens = iter(re.split(r'''("|/\*|\*/|//|\n)''', source))
strings = []
for token in tokens:
if token == '"':
strings.append(''.join(consume(tokens, '"')))
elif token == '//':
consume(tokens, '\n')
elif token == '/*':
consume(tokens, '*/')
return strings

data = '''
// this is an inline comment with the name "Alpha 1"

string x = "Alpha 2";
/** this is a block comment with the string "Alpha 3" */
foo("Alpha 4");
string y = "Alpha /* */ 5 // with comments";
'''
print(extract_strings(data))

关于python - 使用 Python 查找源代码中不在注释内的所有字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47945819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com