использование регулярных выражений (регулярных выражений) для одновременной замены нескольких шаблонов в R - PullRequest
1 голос
/ 04 апреля 2020

У меня есть вектор строк, и я хочу удалить -es из всех строк (слов), заканчивающихся на -ses или -ces одновременно. Причина, по которой я хочу сделать это одновременно, а не последовательно, заключается в том, что иногда бывает так, что после удаления одного конца появляется другое окончание, в то время как я не хочу применять этот шаблон к одному слову дважды. Я понятия не имею, как использовать два шаблона одновременно, но это лучшее, что я мог:

text <- gsub("[sc]+s$", "[sc]", text)

Я знаю, что замена не верна, но мне интересно, как можно Я показываю, что хочу заменить его на только что обнаруженную букву (c или s в данном случае). Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 04 апреля 2020

Чтобы удалить es в конце слова , которому предшествует s или c, вы можете использовать

gsub("([sc])es\\b", "\\1", text)
gsub("(?<=[sc])es\\b", "", text, perl=TRUE)

Для удаления их в конце строк , вы можете go при использовании своего $ якоря:

gsub("([sc])es$", "\\1", text)
gsub("(?<=[sc])es$", "", text, perl=TRUE)

Первый gsub шаблон TRE ([sc])es\b: группа захвата # 1, который соответствует либо s или c, затем сопоставляется es, а затем \b удостоверяется, что следующий символ не является буквой, di git или _. \1 в замене - это обратная ссылка на значение, сохраненное в буфере памяти группы захвата № 1.

Во втором примере с регулярным выражением PCRE (из-за perl=TRUE), (?<=[sc]) положительный взгляд за спиной используется вместо ([sc]) группы захвата. Взгляды не потребляют текст, соответствующий текст не попадает в значение соответствия, и, следовательно, нет необходимости его восстанавливать. Замена - пустая строка.

0 голосов
/ 04 апреля 2020

Строки, заканчивающиеся на «ces» и «ses», следуют одному и тому же шаблону, то есть «* es $»

Если я правильно понимаю, вам не нужны два шаблона.

Пример: x = c("ces", "ses", "mes)

gsub( pattern = "*([cs])es$", replacement = "\\1", x)

[1] "c" "s" "mes"

Надеюсь, это поможет.

M

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...