Проблема манипулирования текстом - как заменить текст после известного значения - PullRequest
2 голосов
/ 10 июля 2011

У меня большой текстовый файл, содержащий имена файлов, оканчивающиеся на .txt. Некоторые строки файла имеют нежелательный текст после расширения имени файла.Я пытаюсь найти способ поиска + замены или обрезки всего файла, чтобы, если строка была найдена с .txt, что-нибудь после этого просто удалялось.Пример

C: \ Test1.txt

C: \ Test2.txtHelloWorld это моя проблема

C: \ Test3.txt_ _ __ _Annoying stuff1234 .r

Желаемый результат

C: \ Test1.txt

C: \ Test2.txt

C: \ Test3.txt

Я пробовал с помощью notepad ++ или с помощью batch / powershell, но получил близко, без сигар.

(Get-Content "D:\checkthese.txt") | 
Foreach-Object {$_ -replace '.txt*', ".txt"} | 
Set-Content "D:\CLEAN.txt"

MyЯ думаю, что если я заменю что-либо (Wildcard *) после .txt, то я бы обрезал то, что мне нужно, но это не работаетЯ думаю, что мне нужно использовать регулярное выражение, купить синтаксис неправильно.

1 Ответ

5 голосов
/ 10 июля 2011

Просто измените * на .*, например, так:

(Get-Content "D:\checkthese.txt") | 
Foreach-Object {$_ -replace '\.txt.*', ".txt"} | 
Set-Content "D:\CLEAN.txt"

В регулярных выражениях * означает «0 или более раз», и в этом случае оно будет действоватьв последнем t из .txt, поэтому .txt* будет соответствовать только .tx, .txt, .txtt, .txttt и т. д.

., однако,соответствует любому персонажу.Это означает, что .* соответствует 0 или более из всего, что вы хотите.Из-за этого я также избежал . в .txt, так как в противном случае он мог бы разбиться на имена файлов, такие как: alovelytxtfile.txt, которые будут обрезаны до alovel.txt.

Для получения дополнительной информации см.

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