Как я могу удалить строки, которые имеют менее 11 номеров, но более 8 номеров в одной строке в блокноте ++ - PullRequest
0 голосов
/ 27 февраля 2019

Как я могу удалить строки, которые имеют менее 11 номеров, но более 8 номеров в одной строке в блокноте ++.Числа отделены друг от друга буквами или пробелами и т. Д.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019
  • Ctrl + H
  • Найти что: ^(?:\D*\d){8}(?:\D*\d){0,3}(?:\R|$)
  • Заменить на: LEAVE EMPTY
  • check Обтекание
  • check Регулярное выражение
  • Заменить все

Объяснение:

^                   # beginning of line
  (?:\D*\d){8}      # non capture group, 0 or more NON digit and 1 digit, may appear 8 times
  (?:\D*\d){0,3}    # non capture group, 0 or more NON digit and 1 digit, may appear 0 upto 3 times
(?:\R|$)            # non capture group, linebreak or end of file

Дано:

1234567
12345678
123456789
1234567890
12345678901
123456789012
a1b2c3d4e5f6g7
a1b2c3d4e5f6g7h8
a1b2c3d4e5f6g7h8i9
a1b2c3d4e5f6g7h8i9j0k1l2

Результат для данного примера:

1234567
123456789012
a1b2c3d4e5f6g7
a1b2c3d4e5f6g7h8i9j0k1l2

Снимок экрана: enter image description here

0 голосов
/ 27 февраля 2019

Ваше требование говорит об удалении строк, имеющих 9 или 10 цифр, но не более или менее, чем эта.Вы можете попробовать использовать lookaheads, чтобы справиться с этим.В режиме регулярных выражений попробуйте найти следующий шаблон:

^(?!.*\d.*\d.*\d.*\d.*\d.*\d.*\d.*\d.*\d.*\d.*\d)(?=.*\d.*\d.*\d.*\d.*\d.*\d.*\d.*\d.*\d).*

Затем просто замените его пустой строкой (ничего).Следуйте демонстрации ниже, чтобы убедиться, что шаблон правильно помечает соответствующие строки.

Демо

Редактировать:

Вот еще один шаблон, который вы можете использовать без заглядывания, который немного проще для глаз:

^\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d?\D*$

Это снова говорит, что соответствует любой строке, которая содержит 9 или 10 цифр, но небольше или меньше этого.

...