шаблоны регулярных выражений на R: n-тире, m-тире, круглые скобки

#r #regex #string #tidyverse

#r #регулярное выражение #строка #аккуратная вселенная

Вопрос:

У меня есть два вопроса о регулярных выражениях:

Часть 1: у меня есть вектор символов с такими строками:

 raw_strings <- c("hello world (abc)", "no hi world (abc(d))")
 

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

 clean_strings <- c("abc", "abc(d)")
 

До сих пор я использовал это:

 str_extract(raw_strings, "(?<=\(). ?(?=\))")
 

Однако это приводит к этому:

 "abc" "abc(d"
 

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

Часть 2: у меня есть несколько строк, которые выглядят так:

 b_strings <- c("5.2 ko – word (longer word)", "5.9 ko - two words (long)")
 

Я хотел бы иметь это:

 b_strings_clean <- c("word", "two words")
 

До сих пор я делал это:

 str_extract(ac_meta, "\s[^-–]*$")
 

Что приводит к:

 "word (longer word)" "two words (long)"
 

Как я могу удалить все после круглой скобки (включая круглую скобку)?

Спасибо.

Ответ №1:

Работает ли это с использованием обходных путей:

 str_extract(raw_strings, '(?<=\().*(?=\))')
[1] "abc"    "abc(d)"

str_extract(b_strings, '(?<=[–-]\s).*(?=\s\()')
[1] "word"      "two words"