Я думаю, то, что вам нужно, это что-то вроде
> gsub("^([0-9]{,5}).*", "\\1", paste0(1:9, collapse = ""), perl = TRUE)
[1] "12345"
где perl = TRUE
активирован.
Это странно: в моей системе man pcrepattern
говорит: «{,6} — это не квантификатор, а буквальная строка из 4 символов». Я не понимаю, почему {,5}
ведет себя так {5}
здесь.
@user2554330 user2554330 это интересно. К сожалению, я не эксперт по регулярным выражениям. но только что увидел, что {, n}
поддерживается в стиле Perl perldoc.perl.org/perlre
Я могу воспроизвести ваш вывод. Но я думаю, что всегда лучше указать явно «{1,5}».
@s_baldur да, всегда полезно указывать минимальное количество вхождений.
Использованное вами регулярное выражение не задокументировано. R документирует только {n}
, {n,}
и {n,m}
как синтаксис повторения. Если вы используете
gsub("^([0-9]{0,5}).*","\\1",paste0(1:9,collapse = ""))
вы получаете ожидаемый "12345"
результат.
Спасибо. Первоначально я изучал регулярное выражение, используя AWK, и считаю, что оно там работает. Нет ответа, почему {,n}
терпит неудачу именно таким образом, но пока у нас есть решение, которое предсказуемо и имеет смысл... :)
@BBB Существует много механизмов регулярных выражений. Если у вас есть проблемы с тем, как устроен R, обратитесь к авторам движка, которые не являются RCore. Подробности смотрите ?regex
.
Я уже объяснил почему в этом моем ответе. TLDR: Всегда указывайте минимальный порог.