請考慮read.table
身體爲文本文件,用下面的代碼創建:正則表達式查找功能的函數體調用
sink("readTable.txt")
body(read.table)
sink()
使用正則表達式,我想找到所有的函數調用的形式foo(a, b, c)
(但有任何數量的參數)在"readTable.txt"
。也就是說,我希望結果包含read.table
正文中所有被調用函數的名稱。這包括
foo(a, bar(b, c))
的嵌套功能。保留字(return
,for
,for
等)和使用反標記的功能('=='()
,'+'()
等)可以包含在內,因爲我可以稍後刪除它們。
所以在一般情況下,我在尋找的模式text(
或text (
那麼可能的嵌套功能,如text1(text2(
,但跳過文本如果它的參數,而不是功能。這是迄今爲止我所在的地方。這很接近,但並不完全。
x <- readLines("readTable.txt")
regx <- "^(([[:print:]]*)\\(+.*\\))"
mat <- regexpr(regx, x)
lines <- regmatches(x, mat)
fns <- gsub(".*(|(=|(<-)))", "", lines)
head(fns, 10)
# [1] "default.stringsAsFactors()" "!missing(text))"
# [3] "\"UTF-8\")" "on.exit(close(file))" "(is.character(file))"
# [6] "(nzchar(fileEncoding))" "fileEncoding)" "\"rt\")"
# [9] "on.exit(close(file))" "\"connection\"))"
例如,在上述[9]
,來電是有的,但我不希望在結果file
。理想情況下,它將是on.exit(close(
。
我該如何去改善這個正則表達式?
如果它不一定是一個正則表達式的解決方案,請考慮'codetools :: walkCode'。 http://stackoverflow.com/questions/11872879/finding-out-which-functions-are-called-within-a-given-function/11878961#11878961 – GSee
@GSee,現在很有趣,也很有用。對於這個問題,我想堅持使用正則表達式方法。這是我爲本科生開設的一個問題,我只是想改善我之前的回答。儘管發佈該功能作爲答案,但它非常酷。 –
您可以提供您搜索的匹配樣本輸入數據嗎? – hwnd