Как удалить все, кроме шаблона «01 — 10» и наоборот?

#regex #atom-editor

Вопрос:

Я хочу удалить из файла все, включая цифры, символы, специальные символы, кроме 01 - 10 шаблона. Например:

 01 - 10
This is the first one :1
02 - 20
This is the second one -2
03 - 30
This is the third one "3
04 - 40
This is the forth one ;4
05 - 50
This is the fifth one .5
 

Регулярное выражение , которое я использовал [^dds-sdd] , состоит в том, чтобы соответствовать всему, кроме шаблона «01 — 10», выбрав dds-dd и используя набор символов charet(^).
Но, используя это, я получаю:

 01 - 10
     1
02 - 20
     -2
03 - 30
     3
04 - 40
     4
05 - 50
     5
 

Но я хочу, чтобы результат был:

 01 - 10
02 - 20
03 - 30
04 - 40
05 - 50
     
 

Т. е. я хочу,
чтобы шаблон 01 — 10 и
не включал ни одного человека :1 и -2 и «3 и ;4 и .5, как указано в задаче вверху.

И наоборот, т. е. для выбора каждой строки, кроме шаблона «01 — 10»
, например:

 This is the first one :1
This is the second one -2
This is the third one "3
This is the forth one ;4
This is the fifth one .5
 

Я хочу знать шаблон регулярного выражения для случая 01 — 10 и наоборот, чтобы я мог хранить оба отдельно сгенерированных результата в отдельных файлах.

Комментарии:

1. Используйте ^(?!0(d) - g{1}0$).* для сопоставления и замены пустой строкой.

2. Спасибо за ваш быстрый ответ, но не могли бы вы уточнить, пожалуйста, чтобы я мог понять, как работает это регулярное выражение

3. Я использую текстовый редактор ATOM

4. У меня есть еще один вопрос по этому поводу — применимо ли это и для шаблона типа 01:10 с небольшими изменениями, такими как ^(?!0(d):g{1}0$).* ?

Ответ №1:

Вы можете использовать это регулярное выражение:

 ^(?!d{2}h*[:-]h*d{2}h*$).*[rn]
 

Демонстрация регулярных выражений

Сведения о регулярном выражении:

  • ^ : Начало
  • (?! : Начните с негативного образа
    • d{2} : Совпадение 2 цифр
    • h*[:-]h* : Сопоставьте 0 или более горизонтальных пробелов, за которыми следует : или - за которыми следует 0 или более горизонтальных пробелов
    • d{2} : Совпадение 2 цифр
    • h* : Совпадение 0 или более пробелов
    • $ : Конец строки
  • ) : Конец негативного образа
  • .* : Сопоставьте что угодно
  • [rn] : Совпадение 1 разрывов строк
  • Замена-это пустая строка для удаления всех совпадающих строк

Обратное Удаление

Для удаления строк пар цифр вы можете использовать:

 ^(?=d{2}h*[:-]h*d{2}h*$).*[rn] 
 

Демонстрация регулярных выражений 2

Комментарии:

1. Большое вам спасибо за то, что нашли время для подробного объяснения работы вашего предоставленного regex…It очень полезно…Хорошего вам дня!!!

2. Просто уточнение. Вы тоже хотите сохранить такие строки 12:89 ? Потому что вопросы упоминают except 01 - 10 pattern

3. Да, просто щелкнул, что если шаблон похож на 12:89, чтобы я мог лучше понять, как работает регулярное выражение… но еще раз спасибо вам за ваше подробное объяснение

4. @AkshayaAmar Вас конкретно интересует структура 0x - x0 или какие-либо двузначные числа, разделенные дефисом? Основываясь на примерах, приведенных в вашем вопросе, первое, по-видимому, верно. Обратите внимание, что в другом ответе любые двузначные числа будут разделены знаком » — » (например, 55 - 23 ). Это то, чего ты хочешь?

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

Ответ №2:

Используйте это:

 ^(?!dds-sdd).*
 

Демо: https://regex101.com/r/t4qrh0/1

Комментарии:

1. спасибо за ваш быстрый ответ…могу ли я использовать это же регулярное выражение ^(?!dds:sdd).* для шаблона, такого как 01:10 тоже?

2. ^(?!dds:sdd).* будет работать, если это «01 : 10» (с пробелами), но если это 01:10 (без пробела), то вам нужно ^(?!dd:dd).*

3. Вы можете просто открыть ссылку, которую я опубликовал, и поиграть с регулярным выражением, вы увидите результат в реальном времени 🙂

4. Большое вам спасибо за разъяснение и ссылку тоже… Хорошего вам дня!!!