正则表达式正则表达式-仅连接R中的大写单词

正则表达式正则表达式-仅连接R中的大写单词,r,regex,R,Regex,我有以下内容: 拉蓬塔太阳能光伏太阳能5.54 12/27/19 沼气生物技术公司JUSTO DARACT 1.07 1/14/20 我想创建一个正则表达式,将所有大写单词与下划线连接起来,例如: 蓬塔阳光酒店和BIO_JUSTO_DARACT酒店 我怎样才能在R和regex中完成它 谢谢试试这个: vec假设没有任何非大写单词以大写字母结尾,您可以用大写字母包围的任何空格替换下划线: strngs <- c("Solar_pv SOLARES DE LA PUNTA 5.54 12/27

我有以下内容:

拉蓬塔太阳能光伏太阳能5.54 12/27/19 沼气生物技术公司JUSTO DARACT 1.07 1/14/20

我想创建一个正则表达式,将所有大写单词与下划线连接起来,例如:

蓬塔阳光酒店和BIO_JUSTO_DARACT酒店

我怎样才能在R和regex中完成它

谢谢

试试这个:


vec假设没有任何非大写单词以大写字母结尾,您可以用大写字母包围的任何空格替换下划线:

strngs <- c("Solar_pv SOLARES DE LA PUNTA 5.54 12/27/19", "Biogas BIO JUSTO DARACT 1.07 1/14/20")
gsub("([A-Z]) ([A-Z])", "\\1_\\2", strngs)
[1] "Solar_pv SOLARES_DE_LA_PUNTA 5.54 12/27/19"
[2] "Biogas BIO_JUSTO_DARACT 1.07 1/14/20"      
> 


是否只返回大写单词?如果是这样的话,我们可以使用

gsub(' ', '_', stringr::str_extract(x, '\\b[A-Z]+(?:\\s+[A-Z]+)*\\b'))
#[1] "SOLARES_DE_LA_PUNTA" "BIO_JUSTO_DARACT"
但是,正如其他答案所指出的,如果您只想更改文本的一部分,我们可以使用str_替换为相同的正则表达式

stringr::str_replace(x, "\\b[A-Z]+(?:\\s+[A-Z]+)*\\b", 
         function(m) gsub(" ", "_", m))

#[1] "Solar_pv SOLARES_DE_LA_PUNTA 5.54 12/27/19" 
#[2] "Biogas BIO_JUSTO_DARACT 1.07 1/14/20" 
资料

x <- c("Solar_pv SOLARES DE LA PUNTA 5.54 12/27/19", 
       "Biogas BIO JUSTO DARACT 1.07 1/14/20")