Почему не расщепление строк после последней открытой скобки? - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь разбить строку по последнему вхождению левой ("(") скобки, но по какой-то причине R и stringr::str_split не распознают это.

В идеале, яхотите, чтобы строка разбила (PP).

Любые идеи?

library(stringr)

## Doesn't Work
str_split("Ben Meyers (1), Hank Crone (1) (PP)", "\\([^\\(]*$", simplify = TRUE)
#>      [,1]                              [,2]
#> [1,] "Ben Meyers (1), Hank Crone (1) " ""

## Works
str_split("Ben Meyers (1), Hank Crone (1) (PP)", "\\(", simplify = TRUE)
#>      [,1]          [,2]              [,3]  [,4] 
#> [1,] "Ben Meyers " "1), Hank Crone " "1) " "PP)"

Создано в 2018-12-13 пакетом представлением (v0.2.0).

1 Ответ

0 голосов
/ 13 декабря 2018

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

"\\((?=[^(]*$)"

Шаблон \((?=[^(]*$)

  • \( - (
  • (?=[^(]*$) - положительныйзаголовок, который требует 0 или более символов, отличных от ( до конца строки непосредственно справа от текущего местоположения.

R test:

> library(stringr)
> str_split("Ben Meyers (1), Hank Crone (1) (PP)", "\\((?=[^(]*$)", simplify = TRUE)
     [,1]                              [,2] 
[1,] "Ben Meyers (1), Hank Crone (1) " "PP)"

Если выЕсли вы хотите "обрезать" пробел из элемента перед последней открытой скобкой, вы можете добавить \s* в начале (для соответствия 0 или более пробелов):

"\\s*\\((?=[^(]*$)"
 ^^^^

См. regex demo online .

...