2016-08-18 2 views
3

Мне нужен скрипт регулярного выражения (в языке R), который находит последнее, но одно совпадение.R регулярное выражение: найти последнее, но одно совпадение

Вот пример:

input = c("(test1(test2(test3","(((((othertest1(othertest2(othertest3") 
regexpr('the_right_regular_expression_here_which_can_finds_the_last_but_one_'(' ', input) 

Результат должен быть: и , потому что в первом случае последней, но один «(» находится в 7-м положении (слева направо), а во втором случае последний, но один '(' in в 16-й позиции (слева).

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

\\([^\\(]*$ 

Благодарим за помощь!

+0

В зависимости от того, что вы имеете в виду * найти *, это может сделать это для вас: '\ ([^ (] * \ ([^ (] * $'. [См. Здесь] (https://regex101.com/r/cY6nG7/1). – ClasG

+0

Попробуйте '' (\\ ([^ (] *) {2} $ "' –

ответ

6

Чтобы соответствовать фрагмент текста, начиная с последней, но один (, вы можете использовать

"(\\([^(]*){2}$" 

Детали:

  • (\\([^(]*){2} - 2 последовательности:
    • \( - буква (
    • [^(]* - кроме (
  • $ ноль или больше символов - конец строки.

Испытание R:

> input = c("(test1(test2(test3","(((((othertest1(othertest2(othertest3") 
> regexpr("(\\([^(]*){2}$", input) 
[1] 7 16 
attr(,"match.length") 
[1] 12 22 
attr(,"useBytes") 
[1] TRUE 
+1

Спасибо, это работает. – Slownz