2016-07-25 10 views
1

Я знаю, что ^. - это первый символ и (\d+)(?!.*\d) - последний номер. Я пробовал использовать | между ними и пытался найти код для второго символа, но без успеха.Regex: удалить все кроме первого символа и последнего номера

Это код R.

Возьмем, к примеру:

'ABCD some random words and spaces 1234' должен вывести 'A4' когда я

sub([regex here], "", 'ABCD some random words and spaces 1234')

ответ

3

Если вы использовали ^.|(\d+)(?!.*\d), модель будет соответствовать только первый символ и удалить его с sub и устранило бы первый символ и последние 1 + цифры, если используется с gsub без обратных ссылок в сменном шаблоне. См. this pattern demo.

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

sub("^(.).*(\\d).*$", "\\1\\2", "ABCD some random words and spaces 1234") 

См R demo и regex demo.

Этот шаблон регулярного выражения TRE совпадений:

  • ^ - начало строки
  • (.) - Группа 1 захвата любой символ
  • .* - 0+ любые символы как можно больше до последнего .. .
  • (\\d) - Группа 2 захвата цифры
  • .* - остальная часть строки
  • $ - конец строки.

Образец замены \\1\\2 вновь вставляет значения, полученные с помощью групп 1 и 2, обратно.

+0

спасибо. Как вопрос, как люди начинают изучать Regex? Кажется, что в Интернете много ресурсов, но это так много, чтобы забрать. – Clarinetist

+1

Есть проблема, да. В Base R у вас есть выбор между TRE regex (в 'grep',' sub' и т. Д.), Если вы не используете аргумент 'perl = TRUE'. Если вы его используете, вам придется использовать аромат PCRE regex. С stringr/stringi и т. Д. Вам нужно будет прочитать регулярное выражение ICU. В Интернете много ресурсов, но есть «официальные» страницы. [* PCRE - совместимые регулярные выражения Perl *] (http://www.pcre.org), [* ICU *] (http://userguide.icu-project.org/strings/regexp), [* TRE *] (http://laurikari.net/tre/documentation/regex-syntax/). –

Смежные вопросы