Для полноты вот мой комментарий в качестве ответа.Используя такой исходный файл как arbabnasir.R
:
# /12057918/kak-prochitat-fail-r-v-vide-stroki-ili-kak-izvlech-kommentarii-strok-iz-koda-r
# some additional comments
myfunc <- function(a, ...) {
# verify input parameters
stopifnot(is.integer(a)) # something here
cat("# hello\n")
# add one
a+1L
}
Я могу разобрать его таким образом, чтобы увидеть только комментарии:
grep("^\\s*#", readLines("~/StackOverflow/arbabnasir.R"), value=TRUE)
# [1] "# /12057918/kak-prochitat-fail-r-v-vide-stroki-ili-kak-izvlech-kommentarii-strok-iz-koda-r"
# [2] "# some additional comments"
# [3] " # verify input parameters"
# [4] " # add one"
Если вам нужно все , за исключением целочисленных комментариев:
grep("^\\s*#", readLines("~/StackOverflow/arbabnasir.R"), value=TRUE, invert=TRUE)
# [1] "myfunc <- function(a, ...) {"
# [2] " stopifnot(is.integer(a)) # something here"
# [3] " cat(\"# hello\\n\")"
# [4] " a+1L"
# [5] "}"
# [6] ""
Обратите внимание, что комментарий ... # something here
был , а не , включенный в список комментариев, так как перед символом комментария есть «что-то».Если вы попытаетесь извлечь их лениво, вы можете столкнуться с проблемами, как показано в моей строке кода cat(" hello\n")
: символ комментария находится в строке, поэтому он не является символом комментария.Это перестает быть эффективной проблемой регулярных выражений и входит в токенизацию источника и контекстную интерпретацию, что выходит за рамки этого вопроса.