0

I'm having some issues pulling the desired values from my source string.

I have 2 possible string formats (that I'm differentiating based on a -match operation and if check):

{u'specialGroup': u'projectWriters', u'role': u'WRITER'

or

, {u'role': u'WRITER', u'userByEmail': u'[email protected]'

What I desire to return from the regex:

[0]projectWriters

[1]WRITER

and

[0]WRITER

[1][email protected]

Basically I need to return all values between start string : u' and end string ' as array values [0] and [1] but cannot figure out the regex pattern.

Trying:

[regex]::match($stuff[1], ": u'([^']+)'").groups

Groups   : {: u'WRITER', WRITER}    
Success  : True
Captures : {: u'WRITER'}
Index    : 10
Length   : 11
Value    : : u'WRITER'



Success  : True
Captures : {WRITER}
Index    : 14
Length   : 6
Value    : WRITER

But no sign of [email protected] value.

1 Answer 1

1

A pragmatic approach, assuming that all strings have the same field structure:

$strings = "{u'specialGroup': u'projectWriters', u'role': u'WRITER'}",
           ", {u'role': u'WRITER', u'userByEmail': u'[email protected]'"

$strings | ForEach-Object { ($_ -split 'u''|''' -notmatch '[{}:,]')[1,3] }

yields:

projectWriters
WRITER
WRITER
[email protected]

As for what you tried:

[regex]::match() only ever returns one match, so you need to base your solution on [regex]::matches() - plural! - which returns all matches, and then extract the capture-group values of interest.

$strings | ForEach-Object { [regex]::matches($_, ": u'([^']+)'").Groups[1,3].Value }
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.