2015-05-25 54 views
5

比如這個長度3個或更多的每一個字相匹配,並與xx替代它:如何在給定長度以上修整字符串中的所有單詞?

library(stringr) 
str_replace_all(c("This is a long", "Another one."), "([a-zA-Z]{3,})", "xx") 
#output: "xx is a xx" "xx xx" 

我希望得到的是:

#"Thi is a lon" "Ano one." 
+0

非正則表達式的解決方案也可能是'sapply(strsplit(C( 「這是一個漫長的」, 「一個又一個。」),'「),函數(x)粘貼(strtrim(x,3),collapse =「」))',但你將失去標點符號。 –

+0

or lookaround approach would'gsub(「(?<= [A-Za-z] {3})[A-Za-z] +」,c(「This is a long」,「另一個」。 ),perl = TRUE)' – akrun

回答

4

您可以使用下面的匹配:

([a-zA-Z]{3})[a-zA-Z]+ 

而且隨着\\1

更換10

您還可以使用gsub(從評論)

gsub("([a-zA-Z]{3})[a-zA-Z]+", "\\1", c("This is a long", "Another one.")) 
+3

使用R將是'gsub(「([a-zA-Z] {3})[a-zA-Z] +」,「\\ 1」,c(「This is一個長「,」另一個。「))' –

+0

@DavidArenburg是的..我差點更新..謝謝:) –

相關問題