2
У меня есть регулярное выражение, которое игнорирует многострочные комментарии, которые начинаются с/* ... */ Но не работает с линиями, которые начинаются с //вырезают комментарии C/C++ из исходного файла с помощью питона
Может кто-то посоветует, что добавить в этом регулярном выражении, чтобы сделать его игнорировать
pattern = r"""
## --------- COMMENT ---------
/\* ## Start of /* ... */ comment
[^*]*\*+ ## Non-* followed by 1-or-more *'s
( ##
[^/*][^*]*\*+ ##
)* ## 0-or-more things which don't start with/
## but do end with '*'
/ ## End of /* ... */ comment
| ## -OR- various things which aren't comments:
( ##
## ------ " ... " STRING ------
" ## Start of " ... " string
( ##
\\. ## Escaped char
| ## -OR-
[^"\\] ## Non "\ characters
)* ##
" ## End of " ... " string
| ## -OR-
##
## ------ ' ... ' STRING ------
' ## Start of ' ... ' string
( ##
\\. ## Escaped char
| ## -OR-
[^'\\] ## Non '\ characters
)* ##
' ## End of ' ... ' string
| ## -OR-
##
## ------ ANYTHING ELSE -------
. ## Anything other char
[^/"'\\]* ## Chars which doesn't start a comment, string
) ## or escape
"""
Что вы используете это? Нужно ли регулярное выражение? –
В этот момент вы можете перестать использовать только регулярное выражение (многострочные комментарии не являются контекстно-зависимыми грамматиками). Я использовал собственный парсер для поиска необработанных строк в исходных файлах C/C++: https://github.com/lucasg/MSVCUnicodeUpdater/blob/master/sed.py – lucasg
Похоже, что это случай, когда вы идете с синтаксическим анализом такие как pyparsing, могут быть намного более управляемыми. – shuttle87