Non mi avvicino a questo compito con espressioni regolari. Potrebbe funzionare, ma solo in casi semplici. Si consideri il seguente /tmp/test.R
script:
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)} #...
Come si vede, è un po 'complicato per indicare dove il commento inizia davvero.
Se non ti dispiace riformattare il codice (beh, lei ha affermato che si desidera il più piccolo codice possibile), provare quanto segue:
writeLines(as.character(parse("/tmp/test.R")), "/tmp/out.R")
che darà /tmp/out.R
con:
x <- 1
y <- "#######"
z <- "# not a comment \" # not \""
f <- function(n) {
for (i in seq_len(n)) print(i)
}
alternativa, utilizzare una funzione dal pacchetto formatR
:
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
ha un argomento blank
, che potrebbe essere di vostro interesse. Ma non riesco a farlo funzionare con formatR 0.10 + R 3.0.2 ...
Quale carattere viene utilizzato per commentare? '' #? – rmbaughman
Prova '#. *' Come espressione regolare. – Roland
Se è possibile o meno con espressioni regex: vedere ad es. http://stackoverflow.com/questions/2319019/. Comunque, una lunga storia; in breve: solo parser ti salverà. – gagolews