2016-05-22 13 views
0

私は配列をループしていますが、もう一度これらの値を1つずつループして文字列と一致させ、配列全体の要素が一致すればその文字列を出力する必要があります配列と文字列を一致させる

public class find 
{ 
string[] inputs = {"Third Street Promenade, 1220 3rd St ,Santa Monica, CA 90401","Hi there should"}; 
string store_tran1 = "1220 3rd St ,Santa Monica, CA 90401" 

foreach(var store in stores){ 

         List<string> outputs = new List<string>(); 
foreach (var input in inputs) 
         { 
          outputs.AddRange((new String(input.ToCharArray() 
           .Where(c => Char.IsLetterOrDigit(c) || c == ' ') 
           .ToArray()).Split(' '))); 
         } 
foreach (var output in outputs) 
          { 



           //string sto = store.ToString(); 
           //Console.Write (output+"\n"); 
           bool store_match_check_1 = Regex.IsMatch (store_tran1, @""+Regex.Escape (output)+"", RegexOptions.IgnoreCase); 
           if (store_match_check_1 == true) { 
            //string store_match_check1 = store_match_check_1.Groups [1].Value; 

            res = true; 

           } else { 
            store_array_check.Add ("one"); 
            res = false; 
           } 


          } 


} 
} 

が動作していない予想される出力:私はこのウォーキングを得ることができる方法

Third Street Promenade, 1220 3rd St ,Santa Monica, CA 9040 

+2

なぜ文字列Contains()メソッドを使用するだけの場合正規表現を使用するのですか? – jdweng

+3

あなたが私たちに簡単になるように凹みを修正してください。 :) – nicomp

答えて

0

なぜだけではなく

var inputs = new[] { "Third Street Promenade, 1220 3rd St ,Santa Monica, CA 90401", "Hi there should" }; 
var store_tran1 = "1220 3rd St ,Santa Monica, CA 90401"; 
foreach (var input in inputs) 
{ 
    if (input.Contains(store_tran1)) 
    { 
     Console.WriteLine(input); 
    } 
} 

(とあなたが必要な場合は、常にToLower()を呼び出すか、空白文字を削除するにはTrim()を呼び出すことにより、ケースを無視することができます)

0

あなたの正規表現は、したがって、あなたがどんな試合を取得することはありません、入力文字列からカンマを削除しています。

あなたが本当にすべての英数字以外の文字+カンマを削除したい場合は、そのようにLINQを使用することができます:正規表現は、入力文字列の先頭と末尾から空白をトリムします

var inputs = new[] {"Third Street Promenade, 1220 3rd St ,Santa Monica, CA 90401","Hi there should"}; 
var store_tran1 = "1220 3rd St ,Santa Monica, CA 90401"; 
inputs.Select(s => Regex.Replace(s, @"^\s*|[^\w\s,]+|\s*$", "")) 
     .Where(s => s.Contains(store_tran1)) 
     .ToList() 
     .ForEach(Console.WriteLine); 

C# demo

+0

'.ForEach()'を使用しないでください。https://blogs.msdn.microsoft.com/ericlippert/2009/05/18/foreach-vs-foreach/ – aloisdg

+0

@aloisdg単純な1ライナーとしてのLINQの考え方。私はforeachブロックでそれをラップする方がより良い、より効率的であることに同意します。 –

関連する問題