2010-06-22 4 views
1

У меня есть ряд файлов определенного формата. Я вставил пример here.Удалить все строки, которые не соответствуют регулярному выражению в Notepad ++

---------------------------------------------- 
Attempting to factor n = 160000000000110400000000018963... Found a factor: 400000000000129 
Time (s): 18.9561 
---------------------------------------------- 
Attempting to factor n = 164025000000137700000000028819... Found a factor: 405000000000179 
Time (s): 22.3426 
---------------------------------------------- 
Attempting to factor n = 168100000000155800000000036051... Found a factor: 410000000000197 
Time (s): 101.183 

Я хотел бы использовать регулярное выражение, которое можно использовать для захвата времени, например. для всех строк с форматом «Время (ы)»: X.Y «Я хочу сохранить X.Y на отдельной строке и выбросить ВСЕ ВСЕ.

У меня есть следующее выражение: Time (s): \ s + (\ d +. \ D +), который захватывает их. Это фиксирует нужные мне строки, но Notepad ++, похоже, имеет функциональность для замены чем-то, а не сохраняет то, что соответствует. Поэтому я могу удалить все эти строки, что почти противоположно тому, что я хочу.

Любая помощь?

+0

Вы знаете, что вы можете опубликовать образцы отформатированного кода прямо здесь, не так ли? Потому что пастебин заблокирован для меня. – Amarghosh

ответ

1

Используйте это в командной строке:

for /f "usebackq tokens=3" %a in (`findstr /b "Time" 1.txt`) do @echo %a 
3

Ну я не знаю, Noteplad ++, но его вероятность того, что вы можете использовать результат групп захвата в области замены. Либо попробуйте

\1 

или

$1 

1 = первая группа захвата. Таким образом, вы в основном заменяете всю строку на \ 2 в вашем случае.

+0

Я думаю, что они хотят удалить линии между ними. – Joey

+0

Прямо сейчас это выглядит как notepad ++ поддерживает только синтаксис \ 1 для групп захвата – MKing

0

Используйте следующее выражение для соответствия всей линии:

.*\(s\)\:\s+(\d+.\d+) 

Теперь вы можете заменить это с

\1 

, который дает вам номер соответствует группе 1 (единственная группа, в приведенном выше выражении), который соответствует времени

+0

Я хочу также удалить строки между ними. –

+0

Nvm Я написал программу, которая делает это для меня. –

+0

^^ Как только вы попробуете многострочную обработку с регулярными выражениями, обычно проще написать программу – executor

0

Следуйте следующим шагам (Блокнот ++ 6.2.3):

  1. Чистые и отметьте

    Заменить: ^(Time \(s\):)+ ([.\r]*) с: #\2

  2. Удалить немаркированную линию

    Replace: ^[^#]+[.\n]* с: (empty)

  3. Удалить знак

    Заменить: ^#(.*) с : \1

0

Отрегулируйте свое регулярное выражение так, чтобы оно соответствовало строке «Время» и фиксировало время внутри или соответствовало всей строке. Затем замените на захваченный текст, который будет пустым для игнорируемых строк.

Find what:  (Time \D+(\d+.\d+)|.*) 
Replace with: \2 

Это оставляет вас с последовательностью захваченного раза плюс пустых строк, которые могут быть удалены с помощью TextFX удалят пустые строки, или Расширенную Заменить на «\ г \ п \ г \ п».

Смежные вопросы