Author Posts

October 12, 2017 at 1:57 am

Hi there, here's what i'm trying to accomplish, I have the following:
$t = "|one|two","|three|four","|one|four","|three|two"
I'm trying to use regex to remove first portion in above values:
$t -replace regexvalue | select-object -unique
...and I want to get
two
four
I know it's possible, I just can't seem to get the regex syntax right.
Thank you

October 12, 2017 at 2:51 am

You can't do that directly on an array like you are doing there. RegEx works on a string. You have to loop through the array for each string and do the regex

Using the Pipeline will do this automatically for you since it will send one element of the array down the pipeline at a time.

$t = "|one|two","|three|four","|one|four","|three|two"
$t |
Select-String -Pattern "\|([^\|]+)$" |
Select-Object -ExpandProperty Matches |
ForEach-Object {
    $_.Groups[1].value
} |
Select-Object -Unique

October 12, 2017 at 9:08 am

And if you don't want to deal with regex (assuming the value you want is always in the same position) you could do it with split like this:

$t = "|one|two","|three|four","|one|four","|three|two"

$t | 
ForEach-Object {
    $_.Split('|')[2]
} | 
Select-Object -Unique

October 12, 2017 at 12:44 pm

Wooohoooo, thank you both.