2016-05-31 1 views
4

Мне нужно регулярное выражение в powershell, чтобы разделить строку на строку ## и удалить строку до другого символа (;).Как написать регулярное выражение в powershell

У меня есть следующая строка.

$temp = "[email protected]## deliver, expand;[email protected]## deliver, expand;[email protected]## deliver, expand;" 

Теперь я хочу разбить эту строку и получить только идентификаторы электронной почты в новый объект массива. мой ожидаемый результат должен быть таким.

[email protected] 
[email protected] 
[email protected] 

Чтобы получить выше выхода, мне нужно разбить строку с помощью символа ## и удалить подстроку вверх к запятой (;).

Может ли кто-нибудь помочь мне написать запрос регулярного выражения для достижения этой потребности в powershell ?.

+0

Вы можете использовать '[регулярное выражение] :: Split ($ Темп, '## [^;] *;')', тоже, но вы необходимо удалить ведущий/конечный '' ## [^;] *; '', чтобы избавиться от пустых значений. –

ответ

4

Если вы хотите использовать регулярные выражения на основе расщепления с вашим подходом, вы можете использовать ##[^;]*; регулярное выражение, и этот код, который будет также удалить все пустые значения (с | ? { $_ }):

$res = [regex]::Split($temp, '##[^;]*;') | ? { $_ } 

В ##[^;]*; матчи :

  • ## - двойной #
  • [^;]* - ноль или более символов, отличных от ;
  • ; - буква ;.

См regex demo

enter image description here

+1

Спасибо Wiktor .. – kombsh

3

Используйте [regex]::Matches, чтобы получить все вхождения вашего регулярного выражения. Вы, наверное, не нужно разделить вашу строку первой, если это подходит для вас:

\b\[email protected][^#]* 

Regular expression visualization

Debuggex Demo

код PowerShell:

[regex]::Matches($temp, '\b\[email protected][^#]*') | ForEach-Object { $_.Groups[0].Value } 

Выход:

[email protected] 
[email protected] 
[email protected] 
+1

большое спасибо @jisaak – kombsh