Я пытаюсь извлечь число из строки.
И сделай что-то вроде [0-9]+
на веревочке "aaa12xxx"
и получишь "12"
.
Я думал, это будет что-то вроде:
> grep("[0-9]+", "aaa12xxx", value=TRUE)
[1] "aaa12xxx"
А потом я подумал ...
> sub("[0-9]+", "\\1", "aaa12xxx")
[1] "aaaxxx"
Но я получил ответ:
> sub("[0-9]+", "ARGH!", "aaa12xxx")
[1] "aaaARGH!xxx"
Мне не хватает одной маленькой детали.
?str_extract
я увидел, чтоstr_extract_all
жизнь снова стала хорошей.Наверное, будет поспешно сказать « игнорировать стандартные функции » - файл справки
?gsub
даже для конкретных ссылок в «См. Также»:Итак, это будет работать, и это довольно просто:
источник
Может быть
источник
Вы можете использовать ленивое сопоставление регулярных выражений PERL:
Попытка заменить нецифровые цифры в этом случае приведет к ошибке.
источник
Один из способов был бы таким:
Обратите внимание, что regexpr дает вам начальный и конечный индексы строки:
Таким образом, вы можете использовать эту информацию с функцией substr
Я уверен, что есть более элегантный способ сделать это, но это был самый быстрый способ, который я смог найти. В качестве альтернативы вы можете использовать sub / gsub, чтобы удалить то, что вы не хотите, оставлять то, что вам нужно.
источник
Используйте захватывающие скобки в регулярном выражении и групповые ссылки в замене. Все, что указано в скобках, запоминается. Затем к ним обращается \ 2, первый элемент. Первая обратная косая черта ускользает от интерпретации обратной косой черты в R, так что она передается синтаксическому анализатору регулярных выражений.
источник
Использование strapply в пакете gsubfn. strapply похож на apply в том, что аргументы являются объектом, модификатором и функцией, за исключением того, что объект является вектором строк (а не массивом), а модификатор является регулярным выражением (а не полем):
Это говорит о совпадении одной или нескольких цифр (\ d +) в каждом компоненте x, передавая каждое совпадение через as.numeric. Он возвращает список, компоненты которого являются векторами совпадений соответствующих компонентов x. Глядя на выходные данные, мы видим, что первый компонент x имеет одно совпадение, равное 13, а второй компонент x имеет два совпадения: 12 и 34. Подробнее см. Http://gsubfn.googlecode.com .
источник
Другое решение:
источник
Решение этого вопроса
[[: digit:]] : цифра [0-9]
{1,} : соответствует минимум 1 раз
источник
Одно важное различие между этими подходами - поведение при любых несовпадениях. Например, метод regmatches может не возвращать строку той же длины, что и входные данные, если нет совпадений во всех позициях.
источник
Используя пакет unglue, мы сделаем следующее:
Создано 2019-11-06 пакетом REPEX (v0.3.0)
Используйте
convert
аргумент для автоматического преобразования в число:источник
Вы можете написать свои регулярные функции с помощью C ++, скомпилировать их в DLL и вызвать их из R.
позвонить в R как
источник