从字符串中删除单个字符

5

寻找一个正则表达式,可以从字符串中删除单个字符,并满足以下几个条件。其中一个正则表达式将删除字符串中的所有单个字符,另一个正则表达式仅删除第一个和最后一个字符之间的单个字符。请参见以下示例。

删除所有单个字符:

之前

names <- c("John C. Smith", "Chris T. Anderson", "Mary H. Jane",
           "J. J. Smith", "J. Thomas")

之后:

"John Smith", "Chris Anderson", "Mary Jane", "Smith", "Thomas"

删除单个字符,排除第一个和最后一个字符

之前

names <- c("John C. Smith", "Chris T. Anderson", "Mary H. Jane",
           "J. J. Smith", "J. Thomas")

之后:

"John Smith", "Chris Anderson", "Mary Jane", "J. J. Smith", "J. Thomas"
2个回答

7

由于我漏掉了问题的一部分,进行了编辑

gsub可以从数据中删除模式。在这里,我们删除具有多个字符字符串之前和之后的单个字符。

gsub("(\\w\\w)\\W+\\w\\W+(\\w\\w)", "\\1 \\2", names)
[1] "John Smith"     "Chris Anderson" "Mary Jane"   "J. J. Smith" "J. Thomas"

为了彻底摆脱它们。
gsub("\\W*\\b\\w\\b\\W*", " ", names)
[1] "John Smith"     "Chris Anderson" "Mary Jane"      "  Smith"        " Thomas" 

谢谢@G5W!我会用这个来解决如何处理包括字符串开头的所有字符的问题。谢谢。 - DCRubyHound

1
这是另一个选项。
gsub("\\b[A-Z][[:punct:]]\\s*", "", names)
#[1] "John Smith"     "Chris Anderson" "Mary Jane"      "Smith"         
#[5] "Thomas"        

或者对于第二种情况
sub("(\\w+)\\s+([A-Z][[:punct:]]\\s*){1,}", "\\1 ", names)
#[1] "John Smith"     "Chris Anderson" "Mary Jane"      "J. J. Smith"   
#[5] "J. Thomas"     

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接