R 提取每个单词的第一个字母,但保留特定标点符号

R 提取每个单词的第一个字母,但保留特定标点符号,r,regex,replace,gsub,R,Regex,Replace,Gsub,我有一个包含数百万长人名的向量,我想删除所有字符,但每个单词的第一个字母(即首字母)和一些字符,如“;”和“-”。矢量的名称格式变化很大,小样本如下: text <- c("Alwyn Howard Gentry", "a. h. gentry", "A H GENTRY", "A. H. G.", "Carl von Martius", "Leitão Fi

我有一个包含数百万长人名的向量,我想删除所有字符,但每个单词的第一个字母(即首字母)和一些字符,如“;”和“-”。矢量的名称格式变化很大,小样本如下:

text <- c("Alwyn Howard Gentry", "a. h. gentry", "A H GENTRY", "A. H. G.", 
          "Carl von Martius", "Leitão Filho, H. F. ; Shepherd, G. J.",
          "Dárdano de Andrade - Lima")
因此,我尝试改编一个基于regexp和gsub的答案。我设法得到了首字母,但没有同时得到首字母和字符:

gsub('\\b(\\pL)|.', '\\1', text, perl = TRUE)

"AHG"     "ahg"     "AHG"     "AHG"     "CvM"     "LFHFSGJ" "DdAL"

我对regexp很陌生。我试图修改代码中的“\b(\pL)|.”部分,以便在模式中包含字符,但经过几个小时的尝试后,我放弃了

我应该使用哪个正则表达式来获得与strsplit()和sapply()相同的结果

非常感谢

您可以使用

文本
请参阅和a/

详细信息

  • (*UCP)
    -使
    \b
    可识别Unicode的PCRE动词
  • (\b\p{L}[;-])(*SKIP)(*F)
    -单词或
    开头的任何Unicode字母
    -
    ,然后跳过匹配,并从发生故障的位置搜索下一个匹配
  • |
    -或
  • -除换行符以外的任何字符
  • [^;-](?-除
    -
    之外的任何字符,这些字符不是任何前面带有字符串开头或非单词字符的Unicode字母

感谢Wiktor的快速回答,它工作得非常好。在对您提出的解决方案和演示的速度感到相当迟钝之后,我想知道您是如何在创建演示的。您可以自己输入文本和regexp(基于您以前的regex知识)或者这个平台通过突出显示或点击设计的模式来帮助您创建regexp吗?@R.Lima regex需要手动编写,但是到处都有很多备忘和帮助。您需要的模式不是基本的。
gsub('\\b(\\pL)|.', '\\1', text, perl = TRUE)

"AHG"     "ahg"     "AHG"     "AHG"     "CvM"     "LFHFSGJ" "DdAL"