Как извлечь текст внутри скобок в R? - PullRequest
0 голосов
/ 23 февраля 2019

Как я могу извлечь все скобки, которые включают имя И год?

string="testo(antonio.2018).testo(antonio).testo(giovanni,2018).testo(2018),testo(libero 2019)"

желаемый результат будет выглядеть так:

"(antonio.2018)" "(giovanni,2018)" "(libero 2019)"

Я не хочу извлекать (2018) и (Антонио)

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

@ Локи ответ отличный!Вы также можете попробовать это, я надеюсь, что это сработает для вас:)

x<-regmatches(string, gregexpr("(?=\\().*?(?<=\\))", string, perl=T))[[1]]

>x

[1] "(antonio.2018)"  "(antonio)"       "(giovanni,2018)" "(2018)"          "(libero 2019)"  

#Extract every nth value. 
>x[seq_along(x) %% 2 > 0]
[1] "(antonio.2018)"  "(giovanni,2018)" "(libero 2019)"  

Примечание: Не уверен в вашем полном наборе данных (то есть, если структура всегда будет в n-ом формате. Если это так (каждое 2-е значение), это будет работать в больших масштабах.

0 голосов
/ 23 февраля 2019

Вы можете использовать str_extract_all из пакета stringr с этим шаблоном регулярного выражения:

stringr::str_extract_all(string, 
                         "\\(\\w+([[:punct:]]{1}|[[:blank:]]{1})[[:digit:]]+\\)")

# [[1]]
# [1] "(antonio.2018)"  "(giovanni,2018)" "(libero 2019)"  

Небольшое описание регулярного выражения:

\\w будет соответствовать любому слову-символ
+ означает, что он должен совпадать хотя бы один раз
[[:punct:]] будет соответствовать любому знаку пунктуации
{1} будет совпадать только с одним появлением
(....|....) обозначает один шаблон ИЛИ другойдолжно быть выполнено
[[:blank:]] означает, что должен быть любой пробел
[[:digit:]] означает, что должна появиться любая цифра
\\( скобки должны быть удалены.

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