2014-03-03 198 views
2

尊敬的用户计算器中的字符串中的特定位置的空间,添加在大写和小写字母

许多人遇到他们需要修改字符串的情况。我看到很多 与字符串修改相关的帖子。但是,我还没有遇到的解决方案,我正在寻找 。我相信我的帖子对于其他一些将面临类似 挑战的R用户会很有用。我想向熟悉字符串 修改的R用户寻求一些帮助。

我一直在尝试修改如下所示的字符串。

x <- "Marcus HELLNERJohan OLSSONAnders SOEDERGRENDaniel RICHARDSSON" 

此字符串中有四个人。姓氏是大写字母。 四个姓中的三个与名字保持一致(例如,HELLNERJohan)。 我想分隔姓氏和名字以增加空间(例如,HELLNER Johan)。

我想我需要说明一下,如“选择大写字母的顺序,并且 在最后一个和最后一个大写字母之间添加空格,如果后面有小写字母 ”。

以下文章可能有点相关,但我还没有成功编写代码。

Splitting String based on letters case

非常感谢您的慷慨支持。

+0

滑雪爱好者,呃?去瑞典! – joran

+0

与“Marcus”搭配的姓氏是什么? –

+0

@RScriv [Marcus Hellner](http://en.wikipedia.org/wiki/Marcus_Hellner),[Johan Olsson](http://en.wikipedia.org/wiki/Johan_Olsson_(滑雪者))等等。 –

回答

4

这是通过查找和捕获两个连续的子模式,第一个由一个大写字母(一个姓氏的结尾)组成,另一个由大写然后小写字母组成(用于指示名字的开始)。在这两个群体的任何地方都可以找到,它们被捕获并被替换为一个空格(下面的调用中的"\\1 \\2")。

x <- "Marcus HELLNERJohan OLSSONAnders SOEDERGRENDaniel RICHARDSSON" 
gsub("([[:upper:]])([[:upper:]][[:lower:]])", "\\1 \\2", x) 
# "Marcus HELLNER Johan OLSSON Anders SOEDERGREN Daniel RICHARDSSON" 
+0

谢谢你非常乔希。现在我学到了更多的字符串修改。 – jazzurro

0

如果要矢量分离成名称的矢量,这个分割使用正则表达式字符串以零宽度回顾后和向前断言。

strsplit(x, split = "(?<=[[:upper:]])(?=[[:upper:]][[:lower:]])", 
    perl = TRUE)[[1]] 
# [1] "Marcus HELLNER"  "Johan OLSSON"  "Anders SOEDERGREN" 
# [4] "Daniel RICHARDSSON" 
+0

非常感谢,蓝色。最后,我需要提取每个名字。所以你的建议是非常有帮助的! – jazzurro

相关问题