Один шаблон Regex, но не другой - PullRequest
0 голосов
/ 04 марта 2020

У меня есть образец текста ниже, где мне нужно извлечь все числа от 5 до 7 цифр, которые я могу использовать [0-9]{5,7}+

Однако я не хочу совпадений, которые имеют префикс XXX-YYY-2763464823, которое поймает вышеприведенное выражение.

Я экспериментировал с отрицательным прогнозом и с успехом смотрел назад если бы попробовал такие вещи, как

(?!XXX-YYY-[0-9]+)[0-9]{5,7}+ и другие варианты, которые не сработали.

Кроме того, как только у меня будет правильное совпадение, мне нужно будет удалить все остальное, кроме самих совпадений. это можно сделать с помощью

(шаблон регулярных выражений) |. и заменить на (? {1} $ 1 \ n:)

562020 (to PORT) 
542029 and attachments to Follow
472306
XXX-YYY-000053379 (to PORT) 
578748 and attachments to Follow
480054
498837 (to PORT) & 1639864 to Follow
463507
XXX-YYY-000053461 (to PORT)
XXX-YYY-000053452 and attachments to Follow
436768
XXX-YYY-000053470 (to PORT) 
210763 and attachments to Follow
96259
XXX-YYY-000053489 (to PORT)  
XXX-YYY-000053478 and attachment to Follow99452
XXX-YYY-000005443 (to PORT)  
XXX-YYY-000005433 and attachments to Follow
XXX-YYY-000053605 (to PORT)  
XXX-YYY-000053590 and attachments to Follow
102742
1094839 (Management Discretionary Approval)
XXX-YYY-000006172 (to PORT) 

Любая помощь с благодарностью, заранее спасибо.

1 Ответ

2 голосов
/ 04 марта 2020

Если вы пытаетесь не совпадать с тем, что произошло до выбранных цифр, то это отрицательный взгляд назад. Вы могли бы предположить, что (?<!XXX-YYY-)[0-9]{5,7} будет делать то, что вы хотите.

Но это не так, потому что, если выбранные цифры начинаются после XXX-YYY-0, то отрицательный взгляд позади удовлетворяется (и это всегда верно, если только За XXX-YYY- следуют ровно пять цифр).

И если вы используете это (?<!XXX-YYY-[0-9])[0-9]{5,7}, то, если выбранные цифры начинаются после XXX-YYY-, отрицательный взгляд позади будет удовлетворен (что всегда верно).

И вы не можете поместить в вид сзади что-либо, совпадающее с произвольной длиной цифр, так что вы не можете защитить от обоих одновременно одним взглядом.

Что работает (?<!XXX-YYY-)(?<![0-9])[0-9]{5,7} потому что это проверяет, что нет XXX-YYY- перед выбранными цифрами И нет никаких цифр перед выбранными цифрами. И это учитывает оба условия - выбранные цифры должны быть в начале строки di git и не могут сразу следовать за XXX-YYY-, что именно то, что вы просили.

Однако другие Дело в том, что если у вас есть число длиннее семи цифр без XXX-YYY-, то регулярное выражение будет соответствовать только первым семи цифрам числа, а это не то, что вам нужно.

Так что вам следует используйте (?<!XXX-YYY-)(?<![0-9])[0-9]{5,7}(?![0-9]), чтобы получить целое число, не следующее за XXX-YYY-. Требуемое регулярное выражение:

(?<!XXX-YYY-)(?<![0-9])[0-9]{5,7}(?![0-9])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...