我想在R中的一个很长的字符向量中用换行符(\n
)替换空格。但是,我不想替换每个空间,但仅限于如果子串强制执行一定数量的字符(n
)。
示例:的
mystring <- "this string is annoyingly long and therefore I would like to insert linebreaks"
现在我想在mystring
的每个空格处插入换行符,条件是每个子字符串的长度大于20个字符(nchar > 20
)。
因此,结果字符串应该如下所示:
"this string is annoyingly\nlong and therefore I would\nlike to insert linebreaks")
在25,26和25个字符后插入了换行符(\n
)。
我怎样才能做到这一点?
也许结合gsub
和strsplit
的东西?
答案 0 :(得分:11)
您可以使用.{21,}?\s
正则表达式来匹配任何21个(自nchar > 20
)字符或更多字符,但尽可能少,直到最近的空格:
> gsub("(.{21,}?)\\s", "\\1\n", mystring)
[1] "this string is annoyingly\nlong and therefore I would\nlike to insert linebreaks"
<强>详情:
(.{21,}?)
- 第1组捕获任何21个或更多字符,但尽可能少(因为{21,}?
是懒惰量词)\\s
- 空白替换包含对组1的反向引用以在空白之前重新插入文本,以及换行符char(如果需要,也可以随意添加CR)。