Вы можете использовать re.split
, чтобы получить то, что вы хотите:
c_code = """
/* This is a
multiline comment.
*/
typedef int rocket;
// This is a single line comment.
typedef double* pi[10];
"""
import re
def split_c(c_code):
tok_re = r"(\n)|\s|(;|/\*|//|\*/|\*|\[\d*\])"
return [t for t in re.split(tok_re, c_code) if t]
print split_c(c_code)
Это дает:
['\n', '/*', 'This', 'is', 'a', '\n', 'multiline', 'comment.', '\n', '*/',
'\n', '\n', 'typedef', 'int', 'rocket', ';', '\n', '\n',
'//', 'This', 'is', 'a', 'single', 'line', 'comment.', '\n',
'typedef', 'double', '*', 'pi', '[10]', ';', '\n']
Обратите внимание, что по мере того, как ваши требования становятся более сложными (я беспокоюсь, что [10] пример действительно должен быть более сложным, например), этот метод, возможно, должен быть полностью заменен.