Регулярное выражение не соответствует новой строке с круглыми скобками - PullRequest
0 голосов
/ 04 октября 2018

У меня есть этот текст:

@Heurtebise (Il ramasse son sac)
Vous regretterez de m'avoir fait du mal.

(Silence.) Vous me chassez ?

@Eurydice
Le mystère est mon ennemi. Je suis décidée à le combattre.

oui oui.

Я хочу 2 совпадения из 2 групп, результат, который я хочу получить:

Match 1
1.  @Heurtebise (Il ramasse son sac)
2.  Vous regretterez de m'avoir fait du mal.

    (Silence.) Vous me chassez ?

Match 2
1.  @Eurydice
2. Le mystère est mon ennemi. Je suis décidée à le combattre.

   oui oui.

И я не могу понять, почему мое регулярное выражение:/^(\@.+)$([^(\@|\#)]+)/ не соответствует 4-й строке, начинающейся с круглых скобок.Вот результат, который я имею:

Match 1
1.  @Heurtebise (Il ramasse son sac)
2.  Vous regretterez de m'avoir fait du mal.

Match 2
1.  @Eurydice
2. Le mystère est mon ennemi. Je suis décidée à le combattre.

   oui oui.

Обратите внимание, как он пропускает строку (Silence.) Vous me chassez ? в match 1.Не могу понять, почему!

Смотрите полный текст дела здесь: http://rubular.com/r/RR2eDc4ZBQ

Может кто-нибудь помочь?Благодаря.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

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

/^(@.+)((?:\R(?![@#]).*)*)$/

См. Демоверсию regex .Он будет соответствовать любой строке, начинающейся с @, а затем будет соответствовать всем последовательным строкам, которые не начинаются с @ или #.

Подробно

  • ^ - начало строки
  • (@.+) - группа 1: @ и остальная часть строки
  • ((?:\R(?![@#]).*)*) - группа 2: 0 или более вхожденийиз:
    • \R(?![@#]) - последовательность разрыва строки, за которой не следует @ или #
    • .* - остаток строки
  • $ - конец строки (хотя и не нужен).
0 голосов
/ 04 октября 2018

Ошибка в классе символов для исключения строки, начинающейся с @ или #:

[^(\@|\#)], избегает @ и #, но также избегает (, | и ).Класс символов не нуждается в чередовании и скобках.Использование [^@#] делает ваш пример кода полезным для меня.

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