Совпадение всех символов в строке между соответствующими символами или концом строки - PullRequest
0 голосов
/ 30 ноября 2018

Я хочу сопоставить все слова между | и концом строки (VEHICLE и все имена Vechicle).Я не хочу, чтобы дополнительные строки соответствовали

Я начал с этим регулярным выражением, но это не исключает символ |:

^\|.*$

Итак, я попробовал этот синтаксис,но оно пропускает последнее слово в строке:

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

Образцы:

Текст выше, я не хочу совпадения

| VEHICLE | Truck | | Bike
| VEHICLE | Car          | | Scooter
| VEHICLE | Sedan | Mini Van    | 
| VEHICLE | Sedan | white, brown, black |     
| VEHICLE | Sedan | pack/cars   | 

Текст ниже, что я надеваюне подходит

Ответы [ 4 ]

0 голосов
/ 30 ноября 2018

Чтобы соответствовать только словам, вы можете сначала сопоставить трубу и пробел.Затем запишите в группе один или несколько символов слова, а затем положительный символ lookahead , чтобы проверить, что справа находится символ пробела или конец строки.

Ваши значениянаходятся в первой группе захвата.

\|\s(\w+)(?=\s\||$)

Пояснение

  • \|\s Совпадение | и символ пробела
  • (\w+) Захват в группе 1+ пробельных символов
  • (?=\s\||$) Позитивный взгляд, чтобы утверждать, что ниже следует либо пробельный символ конца строки

Regex demo

Обновление:

Чтобы соответствовать только словам в Sublime, включая соответствующие вкладки 1+, вы можете использовать:

\|\h+\K\w+(?:[,\/]?\h*\w+)*(?=\h*(?:\||$))

Regex demo

Объяснение

  • \|\h+ Соответствует трубе с последующим 1+горизонтальные пробельные символы
  • \K Забыть то, что в данный момент совпало
  • \w+ Совпадение с 1+ символами слова
  • (?: Группа без захвата
    • [,\/]?\h*\w+ Совпадение необязательной запятой или косой черты, за которым следует 0+ горизонтальных пробельных символов и 1+ словосочетаний
  • )* Закрыть группу без захвата и повторить 0+ раз
  • (?= Позитивный взгляд, чтобы подтвердить следующее
    • \h* Соответствие 0+ горизонтальных пробельных символов
    • (?:\||$) Соответствует либо трубе, либо концу строки
  • ) Закрыть положительный прогноз
0 голосов
/ 30 ноября 2018

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

[^|\s](?:[^|]*[^|\s])?

См. Демоверсию regex

Подробности

  • [^|\s]- любой символ, кроме | и пробела
  • (?:[^|]*[^|\s])? - необязательная последовательность любых символов 0+, отличных от |, за которыми следует любой символ, кроме | и пробела.
0 голосов
/ 30 ноября 2018

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

(?<=\| *)[^|\s]+(?= *\||$)

Подробности :

  • [^|\s]+ - соответствует всем символам, кроме пробелов и | 1+ times.
  • $ - соответствует концу строки (или строке, если включен флаг m).

Демонстрация здесь

Обновление:

0 голосов
/ 30 ноября 2018

Повторите любой символ , но a | в середине и в предвкушении, чередуйте между | и концом строки:

(?<=\|)([^\|]+)(?=\||$)

https://regex101.com/r/YmtEPE/1

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

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