Ответ 1
Try
grep(pattern="[[:digit:]]", x=vec)
вместо этого, поскольку "мета-шаблоны" между двоеточиями обычно требуют двойных скобок.
Я хотел бы извлечь элементы, начинающиеся с цифр из символьного вектора, но там что-то о синтаксисе регулярного выражения POSIX, который я не понимаю.
Я бы подумал, что
vec <- c("012 foo", "305 bar", "other", "notIt 7")
grep(pattern="[:digit:]", x=vec)
вернет 1 2 4
, поскольку они являются четырьмя элементами, в которых есть цифры. Но на самом деле он возвращает 3 4
.
Аналогично grep(pattern="^0", x=vec)
возвращает 1
, как я ожидал бы, потому что элемент 1 начинается с нуля. Однако grep(pattern="^[:digit:]", x=vec)
возвращает integer(0)
, тогда как я ожидаю, что он вернет 1 2
, поскольку это элементы, начинающиеся с цифр.
Как я не понимаю синтаксис?
Try
grep(pattern="[[:digit:]]", x=vec)
вместо этого, поскольку "мета-шаблоны" между двоеточиями обычно требуют двойных скобок.
Другое решение
grep(pattern="\\d", x=vec)
man 7 regex
В выражении скобки имя класса символов, заключенного в "[:" и ":]", обозначает список всех символов, принадлежащих этому классу. Стандартные имена классов символов:
alnum digit punct alpha graph space blank lower upper cntrl print xdigit
Поэтому класс символов, являющийся единственным членом выражения скобки, будет выглядеть как двойные скобки, такие как [[:digit:]]
. В качестве другого примера рассмотрим, что [[:alnum:]]
эквивалентно [[:alpha:][:digit:]]
.