2015-05-29 54 views
2

的內容我們有一個免費的文字:刪除手鐲

sal{del{rf}ghladfs}wds{w12rf}qq 

輸出應該是:

salwdsqq 

如果可能的話,請分享的各種方法。例如:lapply,GSUB,for/while循環,用grep

+3

請編輯問題,並告訴您的輸入和期望的輸出之間的關係。我可以猜到,但是你要寫出好問題。人們越難解答你的意思,你得到答案的機會就越好。 –

+2

您正在使用哪種語言?這非常含糊。 –

+7

你是否缺少一個開放的'{'或文本是否正確? –

回答

1

這個工程中的R

string1 <- "sal{del{rf}ghla}dfs}wds{w12rf}qq" 
string2 <- gsub("{[^{}}]*}", "", string1, perl = TRUE) 
string3 <- gsub("{.*}", "", string2, perl = TRUE) 
string3 
+0

我認爲你在'[^ {}}]' – Frank

+0

PLZ中有一個額外的右括號請參閱編輯的問題。不便之處 –

+0

這個答案也適用於平衡括號,如's < - 「sal {{del {rf} ghla} dfs} wds {w12rf} qq」',並且在這種情況下有一個遞歸擴展:'s2 < S; while(grepl(「{[^ {}] *}」,s2,perl = TRUE))s2 < - gsub(「{[^ {}] *}」,「」,s2,perl = TRUE)@ user3142384此外,它似乎仍然工作正常後,您的問題變更... – Frank

1

我認爲這會工作,你是否有平衡或不平衡的括號:

不平衡(如q)

x <- "sal{del{rf}ghla}dfs}wds{w12rf}qq " 
paste0(gsub('\\w+}|[{} ]', '', strsplit(x, '\\{\\w+')[[1]]), collapse = '') 
# [1] "salwdsqq" 

插入一個隨機

x <- "sal{del{{rf}ghla}dfs}wds{w12rf}qq " 
paste0(gsub('\\w+}|[{} ]', '', strsplit(x, '\\{\\w+')[[1]]), collapse = '') 
# [1] "salwdsqq" 
1

您可以使用遞歸正則表達式來執行此操作。

x <- 'sal{del{rf}{sfddfdffdf}ghladfs}wds{w12rf}qq' 
gsub('{(?:[^{}]+|(?R))*+}', '', x, perl=TRUE) 
# [1] "salwdsqq"