#regex #powershell
#регулярное выражение #powershell
Вопрос:
Регулярное выражение PowerShell: замените каждую запятую на [пробел], если между ними нет значения.
Необработанные данные:
Name 1,Exported,Exported,Exported,Exported,Exported,Exported,Exported
Name 2,Exported,Exported,Exported,Exported,Exported,Exported,
Name 3,Exported,Exported,,Exported,Exported,,
Ожидаемый результат:
Name 1,Exported,Exported,Exported,Exported,Exported,Exported,Exported
Name 2,Exported,Exported,Exported,Exported,Exported,Exported,[Blank]
Name 3,Exported,Exported,[Blank],Exported,Exported,[Blank],[Blank]
This is what I got so far:
```powershell
$data -replace ("(,W)|(,s)", ",[Blank],")
Однако это работает не так, как предполагалось.
Ответ №1:
В качестве шаблона вы могли бы использовать
(?m),[^Srn]*(?=,|$)
Объяснение
(?m)
Встроенный многострочный модификатор,
Сопоставьте запятую[^Srn]*
Сопоставьте 0 раз символ пробела без новой строки(?=,|$)
Позитивный взгляд, утверждайте, что справа находится либо запятая, либо конец, либо строка
И замените на
,[Blank]
Демонстрация регулярных выражений .NET | Демонстрация Powershell
Например
$data=@'
Name 1,Exported,Exported,Exported,Exported,Exported,Exported,Exported
Name 2,Exported,Exported,Exported,Exported,Exported,Exported,
Name 3,Exported,Exported,,Exported,Exported,,
'@
$data -replace ("(?m),[^Srn]*(?=,|$)", ",[Blank]")
Вывод
Name 1,Exported,Exported,Exported,Exported,Exported,Exported,Exported
Name 2,Exported,Exported,Exported,Exported,Exported,Exported,[Blank]
Name 3,Exported,Exported,[Blank],Exported,Exported,[Blank],[Blank]
Комментарии:
1. Неплохо. Это сработало как шарм. Я делал это уже час 🙂 Спасибо!