Сопоставить только круглые скобки с текстом и числами в R - PullRequest
0 голосов
/ 31 января 2019

Я хотел бы заменить скобки и текст между скобками в строковых переменных.Однако я хочу заменить только эти круглые скобки хотя бы одним числом.

Пример строки:

text <- c("Sekretär (dipl.) (G3)", "Zolldeklarant (3 Jahre)", "Grenzwächter (< 2 Jahre)")

Я пробовал следующее:

str_extract_all(text, " *\\(.*?\\d+.*?\\) *")

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

Извлечение должно выглядеть следующим образом:

" (G3)"
" (3 Jahre)"  
" (< 2 Jahre)"

Ответы [ 3 ]

0 голосов
/ 31 января 2019

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

\([^()]*\d+[^()]*\)

См. демонстрацию на regex101.com .
Обратные слеши должны быть дважды экранированы в R, поэтомуваше выражение станет

\\([^()]*\\d+[^()]*\\)


сломано это
\(     # (
[^()]* # not ( nor ), 0+ times
\d+    # digits, 1+
[^()]* # same as above
\)     # )
0 голосов
/ 31 января 2019
text <- c("Sekretär (dipl.) (G3)", "Zolldeklarant (3 Jahre)", "Grenzwächter (< 2 Jahre)")
gsub(".*\\((.*[0-9].*)\\).*","(\\1)",text)

В основном вы просите gsub выбрать всю строку, но назначить в качестве группы (\ 1) строки в скобках и включая число.

Плюс, если вы хотите извлечь последнюювсегда в круглых скобках, которые могут следовать другому подходу.

0 голосов
/ 31 января 2019

Если вы хотите заменить эти термины в круглых скобках, содержащие хотя бы одно число, тогда sub - это хороший базовый вариант R:

text
sapply(text, function (x) {
    gsub("\\([^()]*\\d[^()]*\\)", "REMOVED", x)
})

[1] "Sekretär (dipl.) (G3)"    "Zolldeklarant (3 Jahre)" "Grenzwächter (< 2 Jahre)"
[1] "Sekretär (dipl.) REMOVED"    "Zolldeklarant REMOVED" "Grenzwächter REMOVED"

Я заменил натекст REMOVED в качестве заполнителя для отображения замены.

Редактировать:

Если вы хотите извлечь эти термины, мы также можем использовать subдля этого:

sapply(text, function (x) {
    gsub(".*(\\([^()]*\\d[^()]*\\)).*", "\\1", x)
})

[1] "(G3)" "(3 Jahre)" "(< 2 Jahre)"

Здесь мы фиксируем термин в скобках, а затем заменяем всю строку только первой (и единственной) группой захвата \\1.

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