Как мне создать регулярное выражение, которое по выбору совпадает с набором символов, но игнорирует числа? - PullRequest
1 голос
/ 14 октября 2019

Рассмотрим вектор ниже:

v <- c("Q7", "Q7a", "Q7_", "Q75")

Мне нужно регулярное выражение, которое соответствует первым трем элементам, но не четвертому. Другими словами, мне нужно регулярное выражение, где набор [a-zA-Z_] равен необязательно , но числа не являются . Я попытался сделать следующее, но ни одно из них не подмножество только первых трех элементов:

grep("Q7[^[0-9]]", v)
grep("Q7[^[0-9]]?", v)
grep("Q7([^[0-9]])?", v)
grep("Q7[_a-zA-Z]?[^0-9]", v)
grep("Q7$?[^0-9]", v)

1 Ответ

3 голосов
/ 14 октября 2019

Вы можете использовать

> grep("^Q7[A-Za-z_]*$", v)
[1] 1 2 3

Здесь ^Q7[A-Za-z_]*$ соответствует

  • ^ - начало строки
  • Q7 - Q7 substring
  • [A-Za-z_]* - 0+ букв ASCII или _
  • $ - конец строки.

См. демонстрационную версию regex.

В качестве альтернативы вы можете использовать

> grep("^Q7(?:\\D|$)", v)
[1] 1 2 3

Здесь (?:\\D|$) соответствует либо нецифровому (с \D), либо (|) концустрока ($).

См. это демонстрационное выражение regex .

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