Regex: получить текст между двумя символами - PullRequest
0 голосов
/ 11 апреля 2020

Строка: Y|ZXIET|V| |N|100|Y||ZXIET|ZXIET|Nl Нужно получить сначала ZXIET.

Я пробовал это (?<=Y\|)(.*)(?=\|). Это правильно для первого Y\|, но вместо первого - последний символ |.

Ответы [ 2 ]

3 голосов
/ 11 апреля 2020

Для примера, который вы предоставили, даже простой ([A-Z])\w+ выполняет работу.

То, что вы ищете, это (?<=Y\|)([^|]*). Он соответствует каждому символу, но | во второй группе.

1 голос
/ 11 апреля 2020

Пожалуй, проще всего просто сопоставить регулярное выражение

(?<=Y\|)[^|]*

Демо

и взять первое совпадение. Это соответствует ZXIET после "Y|" и пустой строке после второй "Y|".

В качестве альтернативы, предположим, что вы просто добавили знак вопроса к (.*) в регулярном выражении, которое вы пытались сделать, чтобы он не жадный, приводящий к остановке непосредственно перед первым, а не последним, "|":

(?<=Y\|)(.*?)(?=\|)

Более того, в действительности нет смысла иметь группу захвата, поскольку она просто возвращает совпадение, которое в любом случае вы получите:

(?<=Y\|).*?(?=\|)

Демо

С примером, который соответствует ZXIETV и |ZXIET. Однако, если строка примера была бы

Y||ZXIETV| |N|100|Y||ZXIET|ZXIET|Nl 

, первое совпадение было бы |ZXIETV, что, вероятно, не то, что вы хотите. Поэтому я предлагаю вам использовать первое предложенное мной регулярное выражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...