2017-05-11 9 views
0

ソース文字列から希望の値を引き出す際に問題が発生します。Powershell Regexクエリ

私は2つの可能な文字列形式(私がチェック-match操作にしている場合に基づく差別だことを)持っている:私は正規表現から復帰することを望んで何

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

または

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

を:

[0]projectWriters 

[1]WRITER 

[0]WRITER 

[1][email protected] 

基本的には、開始文字列: u'と終了文字列'の間のすべての値を配列値[0]と[1]として返す必要がありますが、正規表現パターンはわかりません。

[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 

をしかし[email protected]値の兆候:

しようとしていません。

答えて

1

実用的なアプローチは、すべての文字列が同じフィールド構造を持っていると仮定:

$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] } 

利回り:あなたは試してみました何のためとして

projectWriters 
WRITER 
WRITER 
[email protected] 

[regex]::match()しかを返信します。と一致します。あなたのソリューションの基盤は[regex]::matches() - 複数! - allが返され、目的のキャプチャグループ値が抽出されます。

$strings | ForEach-Object { [regex]::matches($_, ": u'([^']+)'").Groups[1,3].Value } 
関連する問題