Поиск ВСЕХ совпадений после определенного персонажа - PullRequest
1 голос
/ 18 февраля 2020

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

Я хочу начать искать кратное , идентично соответствует определенному набору символов и захватывает их всех. Вот пример строки:

Dialogue: 0,0:05:47.99,0:05:50.74,JoJo-main,Koichi,0000,0000,0000,,What are you doing, Giorno Giovanna?!

В этом примере я хочу начать поиск совпадений после ,,. Я хочу найти все экземпляры Gio, т. Е.

Dialogue: 0,0:05:47.99,0:05:50.74,JoJo-main,Koichi,0000,0000,0000,,What are you doing, {Gio}rno {Gio}vanna?!

. Сначала я пытался использовать группы без захвата, такие как /(?:,,.*?)(Gio)/g, а затем выглядеть как /(?<=,,.*?)(Gio)/g, /(?<=,,)(?:.*?)(Gio)/g и /(?<=,,)((?:.*?)(Gio))+/g. потребляя ,,

Ни один из них не дает мне поведения, которое я хочу, так как я хочу индивидуальные совпадения, как будто я только что использовал Gio, но без возможности случайного захвата материала до ,,

Я мог бы, конечно, запустить один RegEx, чтобы найти ,,, а затем передать эту позицию другому RegEx, чтобы найти Gio s после этой точки. Однако у меня есть тысячи таких строк для разбора и тысячи слов для поиска в каждой строке (я разделяю их с помощью |), поэтому в идеале я бы хотел сделать это с одним RegEx и без al oop.

1 Ответ

1 голос
/ 18 февраля 2020

Вы можете рассмотреть следующую опцию для NET или современных ECMAScript 2018+ JS сред:

/(?<=,,.*?)Gio/g

См. regex demo .

Шаблон (?<=,,.*?)Gio соответствует Gio, когда ему предшествует ,, и любые символы 0+, кроме символов перевода строки, как можно меньше.

Следующий вариант будет работать с двигателями регулярных выражений PCRE / Onigmo:

/(?:\G(?!^)|,,).*?\KGio/

См. еще одну демонстрацию регулярных выражений . Здесь (?:\G(?!^)|,,) соответствует либо концу предыдущего успешного совпадения, либо ,,, а затем .*? соответствует и использует любые 0+ символов, кроме символов разрыва строки, как можно меньше, тогда \K сбросит буфер соответствия и Gio приземлится прямо там.

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