2016-03-21 10 views
0

私はcsvを解析して、2つのカテゴリにエクスポートします:powershellを使用して一致と不一致。正規表現の奇数値との比較

csvファイル内のデータは、以下のようにフォーマットされます。

SamAccountName 
xx9999xx 
aa0000aa 
ab0909xc 
etc

私は(同じ私はaa0000bbの命名規則に従ってくださいすべての一致をフィルタリングし、csvファイルにそれをエクスポートすることができます正規表現を必要とします コンベンション(それは奇妙なので):最初の2はazから4までの文字、次に0から9までの数字、2文字のazです。あなたは今aa0000aaとby7690zi

を持つことができることを意味し、私は持っている:

Import-Csv "C:\Path\to\csv" | ForEach { 
$Name =$_.SamAccountName; 
$Name -Match '[a-z]+[a-z]+[0-9]+[0-9]+[0-9]+[0-9]+[a-z]+[a-z]'} | Out-Null; $Matches 

または

ForEach ($Name in $CSV) 
{ 
    If ($Name -Match '[a-z]+[a-z]+[0-9]+[0-9]+[0-9]+[0-9]+[a-z]+[a-z]') 
     { 
     Write-Host "$Matches" 
     }else{ 
     Write-Host "No Match" 
     } 
} 

はどちらも正しくない出力ランダムなものに思えます。 私は次のようで一致させる方法があることを(本当に望んで)思っている:私は、通常の'xx9999xx' -Match '[a-z]+[a-z]+[0-9]+[0-9]+[0-9]+[0-9]+[a-z]+[a-z]'を実行することができ、それがtrueを返した後、

PS C:\Windows> $Matches 

Name       Value                                                 
----       -----                                                 
0        xx9999xx 

a-z #For the first set of letters 
0-9 #For the 4 digits 
a-z #For the second set of letters 

ie [a-z{2}]+[0-9{4}]+[a-z{2}] 

しかし、私はまだドンそれを大規模に行う方法を理解していない。

+0

サンプルの入力と出力を提供できますか? 1行の入力に複数のaa0000aaがありますか? – Arluin

+0

@Arluin - aa0000aaの1つのインスタンス、aa0000abなどの次の値だけがユニークな値ではありません。 – Benny

答えて

2

正規表現に一致する正しい正規表現は次のとおりです。

正規表現:[a-z]{2}[0-9]{4}[a-z]{2}

Regex101 Demo

+1

私の考えは近いです!ありがとうございますNoob :) – Benny

2

noobはあなたの問題を合わせて、正しい正規表現を持っています。プラス記号が正規表現の定量文字のメタ文字であるため、あなたが期待していた以上にマッチングした理由を理解する。それはあなたが2それがよりにマッチしようとするよりも多くの数字を持っているのであれば

を必要に応じてバック与えて、1と無制限の時間の間にできるだけ多くの回数を

を意味します。だから、これは正確に何をしたい一致するなど一定の数量詞{2}{4}を使用して有効な一致

aaaa00000000000aaaa 

だろう。

Regex101.comは、素早くテストするのに最適なリソースです。また、正規表現の非常に良い説明を提供します。

+0

ああ、私はつまらない。そのRegex101はすてきなツールです。私はPHPとpowershellを推測する彼らは正規表現を扱うように似ている?ありがとう、マット – Benny

関連する問題