Использование gsub () для замены всех чисел, кроме определенных подстрок - PullRequest
2 голосов
/ 26 февраля 2020

Скажем, у нас есть:

TestStrings <- c("Some number < 100", "Some number > 999", "Some number $1000", "Some number 1000000")

Я хочу заменить все числа пробелом, кроме чисел после подстрок:

"< \\d+"   "> \\d+"   "$\\d+"

Какое регулярное выражение я мог бы написать в функции gsub() чтобы выполнить такую ​​задачу.

Я знаю, что следующий код неверен, но вот что у меня есть.

gsub(pattern = "^> \\d+|^< \\d+|^$\\d+", replace = " ", TestStrings)

Ответы [ 3 ]

2 голосов
/ 26 февраля 2020

Мы можем использовать следующий шаблон:

[a-z]\s*\K\d+

Вот Regex Demo .

В это будет:

gsub("[a-z]\\s*\\K\\d+", "", TestStrings, perl = T)

 # [1] "Some number < 100"   "Some number > 999"
 # [3] "Some number $1000"   "Some number "
1 голос
/ 26 февраля 2020

Возможно, это поможет

gsub("[<>] \\d+(*SKIP)(*FAIL)|\\d+", " ", TestStrings, perl = TRUE)
#[1] "Some number < 100" "Some number > 999" "Some number $ "    "Some number  "

Если нам не нужны $

gsub("[<>] \\d+(*SKIP)(*FAIL)|\\$*\\d+", " ", TestStrings, perl = TRUE)
#[1] "Some number < 100" "Some number > 999" "Some number  "     "Some number  "    

Если нам нужны $ и цифры

gsub("([<>] |\\$)\\d+(*SKIP)(*FAIL)|\\d+", " ", TestStrings, perl = TRUE)
#[1] "Some number < 100" "Some number > 999" "Some number $1000" "Some number  "    
0 голосов
/ 26 февраля 2020

Как насчет этого:

gsub("[<>\\$] ?\\d+", " ", TestStrings)

Возвращает:

[1] "Some number  "       "Some number  "       "Some number  "       "Some number 1000000"

, что, я думаю, то, что вы ищете.

РЕДАКТИРОВАТЬ На самом деле вы хотите противоположное, поэтому

gsub("([<>\\$] ?\\d+)|\\d+", "\\1", TestStrings) 
[1] "Some number < 100" "Some number > 999" "Some number $1000" "Some number "
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...