Powershell удалить текст из строки - PullRequest
0 голосов
/ 09 сентября 2010

У меня есть строка

[Test: ABC.Test (6)] MORETEXTGOESHERE [(null)] <(null)> - A red fox jumped the fence

и я хотел бы обрезать строку, чтобы показать только

A red fox jumped the fence

Что такоелучший способ пойти об этом.Я уверен, что справлюсь с SubStrings и IndexOfs, но, возможно, какое-нибудь выражение регулярного выражения могло бы помочь?

Ответы [ 2 ]

2 голосов
/ 09 сентября 2010

Используя подстроку, вы можете сделать это:

PS> $str = '[Test: ABC.Test (6)] MORETEXTGOESHERE [(null)] <(null)> - ' +`
           'A red fox jumped the fence'
PS> $str.Substring($str.LastIndexOf('-')+2)
A red fox jumped the fence

Это немного хрупко, если обрабатывать строку без - символов. Вот регулярное выражение, которое будет работать:

PS> $str | Select-String '-\s*([^-]*)$' | Foreach{$_.Matches[0].Groups[1].Value}
A red fox jumped the fence

А если обрабатывать построчно, мне нравится такой подход:

PS> if ($str -match '-\s*([^-]*)$') { $matches[1] }
A red fox jumped the fence

И с более реалистичной строкой:

PS> $str = '2010-09-09 07:15:31,749 [ABC: TEST.TEST (3)] ABB MYCLASS.TEST ' +`
           '[(null)] <(null)> - MessageId: ' +`
           '46b8fd3c-9ce8-4699-9d1b-91f31bfb5c62 CREATED'
PS> if ($str -match '- MessageId:\s*(.*)$') { $matches[1] }
46b8fd3c-9ce8-4699-9d1b-91f31bfb5c62 CREATED

или если вы не хотите CREATED в выводе:

PS> if ($str -match '- MessageId:\s*(.*?)\s+CREATED\s*$') { $matches[1] }
46b8fd3c-9ce8-4699-9d1b-91f31bfb5c62
1 голос
/ 10 сентября 2010

Если ваша строка имеет фиксированный шаблон ... т.е. интересующий вас текст всегда после <(null)>, и в тексте нет «>», тогда как насчет разделения строки ввода на «>» и получения 2-го элемента возвращаемого массива.

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