Учитывая строки
animal1=fish,dog,lion,duck,bee,rabbit,cat
animal2=turkey,dolphin,bear,goat,tiger
animal3=elephant,butterfly,alpaca,chicken,horse
Мы можем получить слова, разделенные запятой, используя, например:
(.*?)(?:,|$)
и мы получим (|#| означает каждое разделение выбора):
animal1=fish,|#|dog,|#|lion,|#|duck,|#|bee,|#|rabbit,|#|cat
animal2=turkey,|#|dolphin,|#|bear,|#|goat,|#|tiger
animal3=elephant,|#|butterfly,|#|alpaca,|#|chicken,|#|horse
Как мне получить отдельные слова с множественным выбором в каждом слове, отбрасывая "животное1=", "животное2=" и "животное3="?
fish,|#|dog,|#|lion,|#|duck,|#|bee,|#|rabbit,|#|cat
turkey,|#|dolphin,|#|bear,|#|goat,|#|tiger
elephant,|#|butterfly,|#|alpaca,|#|chicken,|#|horse
Пока что я мог бы использовать отрицательный просмотр, но он «привязывается» к первому вхождению:
(?<=animal\d=).[^,\s]*
Используя Sublime Text, простой поиск.
Какой-то контекст был бы интересен. Если все ваши строки выглядят как в примерах, и вы просто хотите сопоставить каждое слово, которое не находится в начале строки, подойдет даже \b(?!^)\w+.
В моем примере это тоже сработало \b(?!^)\w+, спасибо!
могут ли сами значения содержать = ? что касается моего примера, то нет. Это массив с буквенно-цифровыми значениями. Пример такой, потому что исходная проблема содержит личные данные, и мне пришлось создать пример и написать вот так.





Следующее должно работать с текстом Sublime для выделения всех слов, которые вы хотите сопоставить:
(?!.*=)\w+
Это соответствует любому слову (что неявно исключает разделители-запятые) после просмотра вперед и утверждения, что термина = нет. Это означает, что ведущий key= не будет сопоставлен.
Используя Sublime, вы можете использовать \G
(?:\G(?!^)|^animal\d+=)(\w+),
Узор соответствует:
(?: Группа без захвата для 2 альтернатив
\G(?!^) Укажите текущую позицию в конце предыдущего совпадения, а не в начале строки.| Или^animal\d+= Укажите начало строки, сопоставьте животное, 1+ цифры и =) Закройте группу без захвата(\w+) Группа захвата 1 захватывает более 1 символа слова, Сопоставьте запятуюВ замене используйте:
$1,|#|
Демонстрация регулярных выражений
Выход
fish,|#|dog,|#|lion,|#|duck,|#|bee,|#|rabbit,|#|cat
turkey,|#|dolphin,|#|bear,|#|goat,|#|tiger
elephant,|#|butterfly,|#|alpaca,|#|chicken,|#|horse
@CasimiretHippolyte Намного лучше, спасибо! В предвидении действительно не было необходимости.
Например, в Sublime, простом поиске выделена часть «животное1». Использование Sublime Text 4.
@DanielsonAlvesJúnior Шаблон фиксирует то, что вы хотите сохранить в группе 1, и соответствует тому, что вы не хотите сохранять. Итак, в Sublime вы можете использовать команду find и replace, чтобы получить результат с ,|#| в вашем вопросе. См. regex101.com/r/7unGuL/1
@ Thefourthbird, я видел на Regex101, он работает отлично! Но в Sublime я хочу выделить момент, когда я помещаю регулярное выражение в Find. Замену пока не использую. Основная цель — сохранить доступность множественного выбора в Sublime! Если вы поместите туда, вы увидите, что поведение другое, я думаю, это может быть конфигурация вкуса.
@DanielsonAlvesJúnior Если вы хотите убедиться, что животное здесь, (?:\G(?!^)|^animal\d+=),?\K\w+ см. regex101.com/r/Ip6alc/1
@Thefourthbird, (?:\G(?!^)|^animal\d+=),?\K\w+ это сработало в Sublime! В моем примере сопоставлено только после "animal = " и выбрано несколько значений без запятой.
@DanielsonAlvesJúnior Если вам нужна запятая (?:\G(?!^)|^animal\d+=)\K,?\w+ см. regex101.com/r/OgmRDV/1
могут ли сами значения содержать
=?