繁体   English   中英

在 R 中使用类搜索和替换字符

[英]Searching and replacing characters with classes in R

我正在尝试替换 R 中的文本。 我只想查找字母和数字之间的空格并将其删除,但是当我使用 [:alpha:] 和 [:alnum:] 进行搜索时,它会替换为该 class 运算符。

> string <- "WORD = 500 * WORD + ((WORD & 400) - (WORD & 300))"

> str_replace_all(string,
+                 "[:alpha:] & [:alnum:]",
+                 "[:alpha:]&[:alnum:]")

[1] "WORD = 500 * WORD + ((WOR[:alpha:]&[:alnum:]00) - (WOR[:alpha:]&[:alnum:]00))"

我怎样才能使用 function 让它返回 -

[1] "WORD = 500 * WORD + ((WORD&400) - (WORD&300))"
str_replace_all(string, "([:alpha:]) & ([:alnum:])", "\\1&\\2")

使用带有环视功能的sub很容易处理您的要求:

string <- "WORD = 500 * WORD + ((WORD & 400) - (WORD & 300))"
output <- gsub("(?<=\\w) & (?=\\w)", "&", string, perl=TRUE)
output

[1] "WORD = 500 * WORD + ((WORD&400) - (WORD&300))"

以下是正则表达式的简要说明:

(?<=\\w)   assert that what precedes is a word character
[ ]&[ ]    then match a space, followed by `&`, followed by another space
(?=\\w)    assert that what follows is also a word character

然后,我们只替换一个& ,两边都没有空格。

这是一个选项,我们匹配正则表达式查找以匹配一个或多个空格( \\s+ )在&之前或之后并替换为空白( ""

gsub("(?<=&)\\s+|\\s+(?=&)", "", string, perl = TRUE)
#[1] "WORD = 500 * WORD + ((WORD&400) - (WORD&300))"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM