Регулярное выражение для остановки при первом появлении - PullRequest
0 голосов
/ 31 октября 2019

Итак, у меня есть этот текст:

:40C:something1

something2

:42A: something3

something4

something5

:42B: something6

something7

:42C: somethin8

something9

Мне нужно остановиться после первого появления: 42X: ... X - буква (любая буква)

Так что, если яначать с: 42A: текст будет возвращен:

: 42A: что-то3

что-то4

что-то5

Но дело в том, что: 42B: могли быбыть не там, это может быть: 42C: так что если после: 42A: у меня нет: 42B: но у меня есть: 42C: он должен остановиться на: 42C:

Так что мне нужен шаблон, который начинаетсяfrom: 42A: и останавливается после первого появления: 42X: И он также должен быть многострочным, потому что я не понял, как использовать мультиинженер в VB.NET, поэтому я использую (. | \ n) * как шаблон

До сих пор я пробовал этот, но не работал:

(?<=:42A:)((.|\n)*)(?=:42.:)

Но этот останавливается после последнего вхождения, в этом случае: 42C: что не правильно

Я программирую в UiPath Studio, которая использует VB.NET в качестве языка.

1 Ответ

0 голосов
/ 01 ноября 2019

Ваш шаблон (?<=:42A:)((.|\n)*)(?=:42.:) не учитывает привязки типа ^, поэтому нет необходимости использовать многострочный.

Но использование шаблона, подобного (.|\n)*, неэффективно, поскольку оно чередуется между любым символом и символом новой строки и слишком сильно совпадает с его жадностью.

Вместо этого вы можете сопоставить :42A: изначало строки и продолжение сопоставления строк, которые не начинаются с :42, за которым следует заглавная буква AZ и:

^:42A:.*(?:\r?\n(?!:42[A-Z]).*)*

В отдельных частях

  • ^Начало строки
  • :42A:.* match :42A:, за которым следует любой символ, кроме новой строки 0+ раз
  • (?: Группа без захвата
    • \r?\n Соответствует новой строке
    • (?!:42[A-Z]:).* Утверждение того, что непосредственно справа, не 42, за которым следует верхний регистр AZ и:
  • )* Закройте группу без захвата и повторите 0+ раз

Regex demo

Обратите внимание, что в этом случае включен многострочный флаг.

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