Ограничение Позитивного Lookahead при захвате

Я получаю некоторый текст с интервалами из потока, как,

ICY Info: StreamTitle='Elvis Presley - Saved';StreamUrl='';

ICY Info: StreamTitle='Elvis Presley - Saved'

ICY Info: StreamTitle='Ivank'av T'ali - Yorua';StreamUrl='';

ICY Info: StreamTitle='Ivank'av T'ali - Yorua'

Я хочу получить

Elvis Presley - Saved
Elvis Presley - Saved
Ivank'av T'ali - Yorua
Ivank'av T'ali - Yorua

я использую (?<=\=\').*(?=';S) или же (?<=\=\').*(?=') но они кажутся не подходящими.

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

@ Редактировать: я только что пришел с (?<=\=\').*?(?=';),

1 ответ

Решение

(?=';S) не будет работать для первого и третьего примера, когда ';S не там.

С другой стороны (?=') Будет слишком много совпадать в первом и третьем примере.

Что вы могли бы сделать, это использовать чередование в предвкушении, чтобы проверить ;: или же ' с последующим концом строки.

(?<==').+?(?='(?:;|$))

Regex demo

объяснение

  • (?<==') Позитивный взгляд сзади, чтобы утверждать, что слева ='
  • .+? Совпадение с любым персонажем один или несколько раз без жадности
  • (?= Позитивный взгляд на то, что справа
    • '(?:;|$) Матч ' с последующим чередованием соответствия либо ; или утвердить конец строки $
  • ) близкий позитивный взгляд
Другие вопросы по тегам