2016-09-01 24 views
0

正規表現で文字列をフィルタリングしようとしていますが、私は正規表現に慣れていないので少し助けてください。また、私は、文字列が怒鳴る入力の例のように、特定の正規表現の一部が含まれているかどうかを確認する必要があります。c#文字列のフィルタリングと正規表現による分割

入力(文字列):

"<value1;127.0.0.1:20000;value2;value3>Lorem ipsum dolor sit amet!" 

これらの値を返すが存在する場合:

string val1 = ????; //can't be null or empty, must be at least 3 chars/ints 
string val2 = ????; //can be empty string 
string val3 = ????; //can be empty string 
string ipaddress = ????; // can't be empty 
string text = ????; //can be empty string 

それ以外の場合は "lorem ipsum ..."というテキストのみを返してください。テキスト:

string text = ????; //can be empty string 

だからまず特定の部分がであるかどうかを確認する必要があります。 文字列にはその部分を使用できません。

どうすればいいのか説明できますか?

編集:ここでは(私は正規表現と本当に悪いんだ、判断しないでください) は、私が試したものです:

private static bool ifContain(string a) 
{ 
    return Regex.IsMatch(a, @"([a-zA-Z0-9]*)\;([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\:[0-9]{5})([a-zA-Z0-9*)\;([a-zA-Z0-9]*)\;([<a-zA-Z0-9]*)"); 
} 
+1

Google正規表現のルールと正規表現のデバッガ(それを読んで実験してください)が解決できない場合は、正規表現と文字列を表示してください。 –

+0

クイック・コメントでは、この関数を使用できます: 'string.IsNullOrWhiteSpace()'または 'string.IsNullOrEmpty()'が空であるかどうかを確認します。 –

+0

さて、私はポストを編集しました、私は貧しい例を投稿します。 – Gogo

答えて

0

は、正規表現とスプリットを組み合わせた方法です。 null /空白/空白の検証を行わず、splitの結果に少なくとも4つの要素が含まれていることを検証しませんでした。これはキャプチャグループを使用してマッチ内のテキストを選択し、.*を使用してグループ内のすべてのテキストを盲目的につかむだけです。グループはかっこで定義されています。

 string txt = "<value1;127.0.0.1:20000;value2;value3>Lorem ipsum dolor sit amet!"; 
     var rgx = new Regex(@"<(.*)>(.*)"); 
     var match = rgx.Match(txt); 
     // Should check if (match.Success) here and only continue if true 
     var entireMatch = match.Groups[0]; // unused 
     var firstCaptureGroup = match.Groups[1].Value; // Everything between < > 
     var secondCaptureGroup = match.Groups[2].Value; // Everything after < > 
     var split = firstCaptureGroup.Split(';'); 

     string val1 = split[0]; 
     string val2 = split[2]; 
     string val3 = split[3]; 
     string ipaddress = split[1]; 
     string text = secondCaptureGroup; 
+0

私のifContainメソッドは現在動作しています(何らかの理由でこれまでに動作しませんでした)。これは私が分割するために探しているものです。ありがとうございました。 – Gogo

+0

[OK]を私のマイナーな編集を参照して、多くのバリデーションがあり、それらのうちの1つが 'match.Success'プロパティをチェックしています。なぜなら、falseの場合、試し続けて続ける理由がないからです。 – Quantic

0

醜い方法without正規表現:

var str = "<value1;127.0.0.1:20000;value2;value3>Lorem ipsum dolor sit amet!"; 

var split = str.Split(';'); 
var split2 = split[3].Split('>'); 

var val1 = split[0].Split('<')[1]; 
var ip = split[1]; 
var val2 = split[2];  
var val3 = split2[0]; 
var text = split2[1]; 

何らかの理由でこれらの値が存在しない場合は、string.IsNullOrWhiteSpace()関数

を使用して後で確認できます例えば

ので、:ここで

var str = "<;;;>"; 

var split = str.Split(';'); 

var val1 = split[0].Split('<')[1]; 

Console.WriteLine(string.IsNullOrWhiteSpace(val1)); //true 
+0

ありがとうございます。私はそれを分割する方法を知っているが、私は考えていた可能性があります多分いくつかの異なる方法は正規表現を使用してこれらの文字列は、特定の部分を含むので、私はその部分が存在する場合、 – Gogo

関連する問題