简体   繁体   中英

Include a space between words longer than n characters

I have a character vector.

x <- c('This is a simple text', 'this is a veryyyyyyyyyy long word', 'Replacethis andalsothis')

I want to insert a space between a word which is longer than n characters. For this example, we can consider n = 10 . I would prefer a regex solution but if you think there are other alternatives I wouldn't mind to try that.

The output that I am looking for -

c('This is a simple text', 'this is a veryyyyyyy yyy long word', 'Replacethi s andalsothi s')

I have tried using the solution from this post by making the necessary changes for my data but it doesn't give the required output.

sub('(.{10})(?=\\S)//g', '\\1 ', x, perl = TRUE)
#[1] "This is a simple text"           "this is a veryyyyyyyy long word" "Replacethis andalsothis" 

You can use

gsub("\\b(\\w{10})\\B", "\\1 ", x) # If your words only consist of letters/digits/_
gsub("(?<!\\S)(\\S{10})(?=\\S)", "\\1 ", x, perl=TRUE) # If the "words" are non-whitespace char chunks

See the regex demo and this regex demo , and the R demo :

x <- c('This is a simple text', 'this is a veryyyyyyyyyy long word', 'Replacethis andalsothis')
gsub("\\b(\\w{10})\\B", "\\1 ", x)
# => [1] "This is a simple text" "this is a veryyyyyyy yyy long word" "Replacethi s andalsothi s"

x <- c("this is a veryyyyyyy|yyy long word")
gsub("(?<!\\S)(\\S{10})(?=\\S)", "\\1 ", x, perl=TRUE)
# => [1] "this is a veryyyyyyy |yyy long word"

The regex matches...

  • \\b - a word boundary
  • (\\w{10}) - ten word chars
  • \\B - only when there is another word char appears immediately on the right (so, the tenth word char is not the end char of the word).

And

  • (?<!\\S) - a location at the start of string or right after a whitespace
  • (\\S{10}) - Group 1: ten non-whitespace chars
  • (?=\\S) - immediately to the right, there must be a non-whitespace char.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM