Подстановка значения на основе частичного паттерна - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь выделять с помощью регулярных выражений URL-адрес: happy_to-learn.com.

Поскольку я действительно новичок в regex, может ли кто-нибудь помочь с моим кодом, почему он не работает?

x <- c("happy_to-learn.com", "His_is-omitted.net")
str_subset(x, "^[a-zA-Z](\\_|\\-)*\\.com$")

Я понимаю, что ^[a-zA-Z](\\_|\\-)* эта часть здесь относится,«Начинайте, когда вы нажимаете диапазон алфавитов от a до z или от A до Z, и он содержит либо _, либо -, если да, то выделите в этой части 0 или более совпадений.

Однако так ли это?Можно ли продолжить этот код, добавив заднюю часть значения, которое я хочу подмножество? т.е. \\.com$ относится ко всем значениям, заканчивающимся на .com.

Есть ли что-то вроде "^[a-zA-Z](\\_|\\-)*...\\.com$" в регулярном выражении?

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Зачем использовать внешний пакет?grep может сделать это тоже.

grep("^[[:alpha:]_-]+.*\\.com$", x, value = TRUE)
#[1] "happy_to-learn.com"

Объяснение.

  1. "^" отмечает начало строки.
  2. "[:alpha:] соответствует любому алфавитусимвол, верхний или нижний регистр в переносном виде.
  3. "^[[:alpha:]_-]+" между [], есть альтернативные символы, которые могут повторяться один или несколько раз.Буквенное или символ подчеркивания _ или знак минуса -.
  4. "^[[:alpha:]_-]+.*" Выше следует любой символ, повторяемый ноль или более раз.
  5. "^[[:alpha:]_-]+.*\\.com$", заканчивающийся строкой ".com" где точка не является метасимволом и поэтому должна быть экранирована.
0 голосов
/ 28 января 2019

Нам нужно указать один или несколько с +, так как _ или - не только после первой буквы.

str_subset(x, "^[a-zA-Z]+(\\_|\\-).*\\.com$")
#[1] "happy_to-learn.com"

Кроме того, .* ссылается на ноль или более символов, так как . может быть любым символом до . и 'com' в конце ($) строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...