2015-05-25 3 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

उपयोग कर सकते हैं एक गैर regex समाधान भी 'हो सकता है sapply (strsplit (ग (," यह एक लंबा है "" एक और एक। "), ''), समारोह (एक्स) पेस्ट (स्ट्रेटिम (एक्स, 3), पतन = "")) ', लेकिन आप विराम चिह्न खो देंगे। –

+0

या एक लुकराउंड दृष्टिकोण 'gsub ("(? <= [ए-ज़ा-जेड] {3}) [ए-ज़ा-जेड] +", सी ("यह एक लंबा है", "दूसरा एक" होगा।), 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

आर का उपयोग करके यह 'gsub (" ([a-zA-Z] {3}) [a-zA-Z] + "," \\ 1 ", c (" यह है एक लंबा "," एक और। "))' –

+0

@ डेविड एडनबर्ग हाँ .. मैं लगभग अद्यतन .. धन्यवाद :) –

संबंधित मुद्दे