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"