如何在 R 中使用 gsub 替换 _A_&_B_

How to replace _A_&_B_ using gsub in R

我正在尝试连接包含来自 R 上两个不同数据表的公司名称的两列。在一列中,我有模式 _A_&_B_,其中 A 和 B 可以是任何字母。我想去掉那两个字母,即长度为 1 的字母被 _

包围

所以如果我有 John_K_&_E_Scott 我想有 John__&__Scott 因为我可以删除标点符号。我试过下面的

names[, JOINING_ID := gsub("[A-Za-z]_&_[A-Za-z]\w", "", JOINING_ID)] 

但这将 John_A_&_ BOYS_ 转换为 John__&_ OYS_,这不是我想要的。

使用以下正则表达式模式:

_[[:alpha:]]_&_[[:alpha:]]_

并替换为 __&__。参见 the regex demo。它不会匹配 John_A_&_BOYS_ 之类的字符串,因此不会出现您遇到的问题。

请注意 [[:alpha:]] 匹配任何字母。

R 用法:

gsub("_[[:alpha:]]_&_[[:alpha:]]_", "__&__", JOINING_ID)

或者,如果您只希望每个字符串匹配 1 个,请使用 sub:

sub("_[[:alpha:]]_&_[[:alpha:]]_", "__&__", JOINING_ID)