Рассмотрим вектор ниже:
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 ответ
Вы можете использовать
> grep("^Q7[A-Za-z_]*$", v)
[1] 1 2 3
Здесь ^Q7[A-Za-z_]*$
соответствует
^
- начало строкиQ7
- подстрокаQ7
[A-Za-z_]*
- 0+ букв ASCII или_
$
- конец строки.
См. демонстрацию регулярных выражений.
В качестве альтернативы вы можете использовать
> grep("^Q7(?:\\D|$)", v)
[1] 1 2 3
Здесь (?:\\D|$)
соответствует либо нецифровому (с \D
), либо (|
) концу строки ($
).
См. эту демонстрацию регулярного выражения.
Похожие вопросы
Новые вопросы
r
R - это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, предоставьте минимальные и воспроизводимые примеры вместе с желаемым результатом. Используйте dput () для данных и укажите все небазовые пакеты с вызовами library (). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. По вопросам, связанным со статистикой, используйте https://stats.stackexchange.com.