Поиск и замена символов с классами в R - PullRequest
1 голос
/ 01 октября 2019

Я пытаюсь заменить текст в R. Я хочу найти пробелы только между буквами и цифрами и удалить их, но когда я ищу с помощью [: alpha:] и [: alnum:], он заменяется этим оператором класса.

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

Как использовать функцию, чтобы она возвращалась-

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

Ответы [ 3 ]

2 голосов
/ 01 октября 2019
str_replace_all(string, "([:alpha:]) & ([:alnum:])", "\\1&\\2")
1 голос
/ 01 октября 2019

Ваше требование достаточно просто выполнить, используя 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

Затем мы заменим простоодин &, без пробелов с обеих сторон.

0 голосов
/ 01 октября 2019

Вот один из вариантов, где мы сопоставляем выражения регулярного выражения, чтобы соответствовать одному или нескольким пробелам (\\s+), предшествующим или последующему &, и заменять пробелом ("")

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