REGEX PCRE - Избегайте строки и первого экземпляра любой строки в скобках - PullRequest
0 голосов
/ 01 мая 2018

Вот пример вида строк, с которыми я работаю:

[TEXT1] ПРИМЕР ТЕКСТА ЗДЕСЬ (ROBERT_01) БОЛЬШЕ ТЕКСТА ЗДЕСЬ ВОЗМОЖНО НЕКОТОРЫЕ НОМЕРА 9999 ТЫС. ТЕКСТ (JIMBO_01)

Что я пытаюсь сделать, это удалить все ПОСЛЕ первого набора скобок, т. Е. "(ROBERT_01)".

Я могу заставить его работать, явно указав сам текст, например ::10000

(?<=TEXT EXAMPLE HERE \(ROBERT_01\)).+

Однако это проблематично, так как строка между круглыми скобками не всегда "ROBERT_01".

РЕДАКТИРОВАТЬ: Обратите внимание, я использую FME трансформатор 'StringReplacer', который использует Regex.

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

То, что вы можете сделать, это сопоставить не открывающую скобку один или несколько раз, пока не встретите открывающую скобку, используя отрицательный класс символов [^(]+. Затем сопоставьте открывающую скобку \(, не сопоставляйте закрывающую скобку ноль или более раз [^)]*, а затем сопоставьте закрывающую скобку \).

Это будет соответствовать [TEXT1] TEXT EXAMPLE HERE (ROBERT_01)

Затем используйте \K, чтобы ранее использованные символы больше не включались в финальное совпадение.

Окончательно соответствует любому символу ноль или более раз .* и будет соответствовать:

MORE TEXT HERE POSSIBLY SOME NUMBERS 9999 THEN TEXT (JIMBO_01)

Regex

[^(]+\([^)]*\)\K.*

0 голосов
/ 01 мая 2018

Регулярное выражение может быть

/\(.*?\)(.*?)$/gm

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

См. онлайн-тестер регулярных выражений

Но, возможно, вам нужен этот другой, который просто сопоставляет текст от начала строки до первого текста, заключенного в скобки

/^(.*?)\s?\(.*\).*$/

См. Также на онлайн-тестере регулярных выражений

...