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

3

我有一个字符串包含以下字符:

" 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:])")

1
也许可以把类似于“(yada):blank:”替换成“\1_\2”? - Frank
\2 说它超出了边界。 - Kayla
1
我认为akrun的方法是最好的(使用前瞻和后顾),但对你的代码进行更直接的修复可能类似于 gsub("([A-Z0-9])[[:blank:]]([A-Z0-9])", "\\1_\\2", x) - Frank
1个回答

2
我们可以使用正则表达式的“lookaround”来匹配跟随大写字母((?<=[A-Z]))并且后面跟着大写字母或数字((?=[A-Z0-9]))的空格,将其替换为_
gsub("(?<=[A-Z]) (?=[A-Z0-9])", "_", v1, perl = TRUE)
#[1] " A_E_222;CMPSC_201 orCMPSC_202"

不幸的是,该行中还有其他文本,我不能在所有内容下面都加下划线。我只想在大写字母之间和大写字母与数字之间使用下划线。 - Kayla
1
是的,我刚刚做了。我的声望很低,所以我不得不等待大约5分钟才能接受它。 - Kayla

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