RegEx для удаления всего до и после разделителя - PullRequest
1 голос
/ 24 мая 2019

Я пытаюсь удалить все до и после двух | разделителей с помощью регулярных выражений.

Пример:

EM|CX-001|Test Campaign Name

и захват всего, кроме CX-001.Я не могу использовать подстроку, так как количество символов до и после может измениться.

Я пытался использовать регулярное выражение (?<=\|)(.*?)(?=\-), но пока выбирается CX-001, мне нужно выбрать все остальное, кроме этого.

Как мне решить эту проблему?

Ответы [ 3 ]

1 голос
/ 24 мая 2019
  • Найти: ^[^|]*\|([^|]+).+$
  • Заменить: $1
1 голос
/ 24 мая 2019

Если в вашей строке только 2 канала, вы можете найти совпадение по первому каналу или совпадение от последнего до конца строки:

^.*?\||\|.*$

Объяснение

  • ^.*?\| Матч от начала строки без жадности до первой трубы
  • | или
  • \|.*$ Матч от последней трубы до конца строки

Regex demo

Или вы можете использовать класс отрицанных символов [^|]* без необходимости захвата групп:

^[^|]*\||\|[^|]*$

Regex demo

Примечание

В вашем паттерне (?<=\|)(.*?)(?=\-) Я думаю, вы имели в виду, что последний положительный прогноз должен быть (?=\|) вместо -, если вы хотите выбрать между 2 трубами.

0 голосов
/ 24 мая 2019

Вы можете попробовать следующее регулярное выражение:

(^[^|]*\|)|(\|[^|]*$)
    String input = "EM|CX-001|Test Campaign Name";

    System.out.println(
        input.replaceAll("(^[^|]*\\|)|(\\|[^|]*$)", "")
    );  // prints "CX-001"

Объяснение регулярного выражения:

NODE                     EXPLANATION
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    ^                        the beginning of the string
--------------------------------------------------------------------------------
    [^|]*                    any character except: '|' (0 or more
                             times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
    \|                       '|'
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
 |                        OR
--------------------------------------------------------------------------------
  (                        group and capture to \2:
--------------------------------------------------------------------------------
    \|                       '|'
--------------------------------------------------------------------------------
    [^|]*                    any character except: '|' (0 or more
                             times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
    $                        before an optional \n, and the end of
                             the string
--------------------------------------------------------------------------------
  )                        end of \2
...