用下划线替换两个大写字母之间的空格 space

Replacing a blank space between two capital letters with an underscore

我的字符串中的字符如下所示:

" A E 222;CMPSC 201 orCMPSC 202" 

我想做的是让它看起来像这样:

" A_E_222;CMPSC_201 orCMPSC_202" 

到目前为止,我尝试了以下代码,但它只在前面或后面放置了一个下划线,所以我不确定还能尝试什么。

str_replace_all(x, "([A-Z][:blank:][A-Z])", "\1_")

str_replace_all(x, "([A-Z][:blank:][:digit:])", "([A-Z][:digit:])")

我们可以使用正则表达式环视来匹配大写字母((?<=[A-Z]))后跟大写字母或数字((?=[A-Z0-9]))的space,将其替换为_

gsub("(?<=[A-Z]) (?=[A-Z0-9])", "_", v1, perl = TRUE)
#[1] " A_E_222;CMPSC_201 orCMPSC_202"