Применять регулярное выражение только к первому слову фразы (определяется пробелами) - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть это регулярное выражение для отделения букв от цифр (и символов) слова: (?<=[a-zA-Z])(?=([[0-9]|[:punct:]])). Моя тестовая строка: "CALLE15 CRA22".

Я хочу применить это регулярное выражение только к первому слову этого предложения (слово определено пробелами). А именно, я хочу применить это только к "CALLE15".

Одно решение состоит в том, чтобы разбить строку (предложение) на слова, а затем применить регулярное выражение к первому слову, но я хочу сделать все в одном регулярном выражении. Другое решение - использовать r stringr::str_replace() (or sub()), который заменяет только первое совпадение, но мне нужно stringr::str_replace_all (or gsub()) по другим причинам.

Что мне нужно, это вставить пробел между ними, что я делаю с помощью функции замены. Я хочу получить результат "CALLE 15 CRA22" и возможность "CALLE15 CRA 22". Я пробую много позиций для пробела и ничего, ни ^ в начале.

https://rubular.com/r/7dxsHdOA3avTdX

Спасибо за вашу помощь !!!!

1 Ответ

1 голос
/ 01 апреля 2019

Я не уверен в вашем заявлении о проблеме (см. Мой комментарий выше), но следующее воспроизводит ваш ожидаемый результат и использует str_replace_all

ss <- "CALLE15 CRA22"
library(stringr)
str_replace_all(ss, "^([A-Za-z]+)(\\d+)(\\s.+)$", "\\1 \\2\\3")
#[1] "CALLE 15 CRA22"

Обновление

Для воспроизведениявывод образца строки из комментария выше

ss <- "CLL.6 N 5-74NORTE"

pat <- c(
    "(?<=[A-Za-z])(?![A-Za-z])",
    "(?<![A-Za-z])(?=[A-Za-z])",
    "(?<=[0-9])(?![0-9])",
    "(?<![0-9])(?=[0-9])")

library(stringr)
str_split(ss, sprintf("(%s)", paste(pat, collapse = "|"))) %>%
    unlist() %>%
    .[nchar(trimws(.)) > 0] %>%
    paste(collapse = " ")
#[1] "CLL . 6 N 5 - 74 NORTE"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...