Ich würde diese Aufgabe nicht mit Regexen nähern. Es kann funktionieren, aber nur in einfachen Fällen. Betrachten Sie den folgenden /tmp/test.R
Skript:
x <- 1 # a comment
y <- "#######"
z <- "# not a comment \" # not \"" # a # comment # here
f <- # a function
function(n) {
for (i in seq_len(n))
print(i)} #...
Wie Sie sehen, es ist ein wenig kompliziert zu erklären, wo der Kommentar wirklich beginnt.
Wenn Sie nichts dagegen haben Ihren Code Neuformatierung (na ja, Sie sagten, dass Sie die kleinste Code möglich wollen), versuchen Sie Folgendes:
writeLines(as.character(parse("/tmp/test.R")), "/tmp/out.R")
die /tmp/out.R
mit geben:
x <- 1
y <- "#######"
z <- "# not a comment \" # not \""
f <- function(n) {
for (i in seq_len(n)) print(i)
}
Alternativ dazu verwenden, um eine Funktion aus dem formatR
Paket:
library(formatR)
tidy_source(source="/tmp/test.R", keep.comment=FALSE)
## x <- 1
## y <- "#######"
## z <- "# not a comment \" # not \""
## f <- function(n) {
## for (i in seq_len(n)) print(i)
## }
BTW, tidy_source
hat ein blank
Argument, das von Ihrem Interesse sein könnte. Aber ich kann es nicht mit formatR 0.10 + R 3.0.2 arbeiten ...
Welches Zeichen wird verwendet, um zu kommentieren? '#'? – rmbaughman
Versuchen Sie '#. *' Als Regex. – Roland
Ob es mit Regexes möglich ist oder nicht: siehe z.B. http://stackoverflow.com/questions/2319019/. Wie auch immer, eine lange Geschichte; kurz gesagt: nur Parser wird dich retten. – gagolews