Как получить значения, разделенные запятой, отбрасывая строку перед ней

Учитывая строки

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, простой поиск.

могут ли сами значения содержать =?

cyberbrain 24.06.2024 12:55

Какой-то контекст был бы интересен. Если все ваши строки выглядят как в примерах, и вы просто хотите сопоставить каждое слово, которое не находится в начале строки, подойдет даже \b(?!^)\w+.

bobble bubble 24.06.2024 17:29

В моем примере это тоже сработало \b(?!^)\w+, спасибо!

Danielson Alves Júnior 24.06.2024 23:10

могут ли сами значения содержать = ? что касается моего примера, то нет. Это массив с буквенно-цифровыми значениями. Пример такой, потому что исходная проблема содержит личные данные, и мне пришлось создать пример и написать вот так.

Danielson Alves Júnior 24.06.2024 23:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Следующее должно работать с текстом 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 Намного лучше, спасибо! В предвидении действительно не было необходимости.

The fourth bird 24.06.2024 15:45

Например, в Sublime, простом поиске выделена часть «животное1». Использование Sublime Text 4.

Danielson Alves Júnior 24.06.2024 23:07

@DanielsonAlvesJúnior Шаблон фиксирует то, что вы хотите сохранить в группе 1, и соответствует тому, что вы не хотите сохранять. Итак, в Sublime вы можете использовать команду find и replace, чтобы получить результат с ,|#| в вашем вопросе. См. regex101.com/r/7unGuL/1

The fourth bird 24.06.2024 23:10

@ Thefourthbird, я видел на Regex101, он работает отлично! Но в Sublime я хочу выделить момент, когда я помещаю регулярное выражение в Find. Замену пока не использую. Основная цель — сохранить доступность множественного выбора в Sublime! Если вы поместите туда, вы увидите, что поведение другое, я думаю, это может быть конфигурация вкуса.

Danielson Alves Júnior 24.06.2024 23:18

@DanielsonAlvesJúnior Если вы хотите убедиться, что животное здесь, (?:\G(?!^)|^animal\d+=),?\K\w+ см. regex101.com/r/Ip6alc/1

The fourth bird 24.06.2024 23:21

@Thefourthbird, (?:\G(?!^)|^animal\d+=),?\K\w+ это сработало в Sublime! В моем примере сопоставлено только после "animal = " и выбрано несколько значений без запятой.

Danielson Alves Júnior 24.06.2024 23:24

@DanielsonAlvesJúnior Если вам нужна запятая (?:\G(?!^)|^animal\d+=)\K,?\w+ см. regex101.com/r/OgmRDV/1

The fourth bird 24.06.2024 23:25

Другие вопросы по теме