2017-08-30 16 views
0

書かれている文字を定義したい。 例を挙げて説明することは簡単だろうと思います。文字の解釈

サンプル;

 void Main(){ 
    List<account> account = new List<UserQuery.account>{ 
    new account() { accountCode = "100", accountName = "That is the house which I want. " }, 
    new account() { accountCode = "101", accountName = "I bought whatever you wanted" }, 
    new account() { accountCode = "102", accountName = "The flowers which you brought me were very beautiful."} 
    }; 

    string search = "*house*"; 
    string search2 = "The flowers*"; 
    string search3 = "*wanted."; 

    var result = account.FirstOrDefault(a => a.accountName.Contains(search)).accountCode; 
    var result2 = account.FirstOrDefault(a => a.accountName.StartsWith(search2)).accountCode; 
    var result3 = account.FirstOrDefault(a => a.accountName.EndsWith(search3)).accountCode; 
} 

public class account 
{ 
    public string accountCode { get; set; } 
    public string accountName { get; set; } 
} 



> result=100 
result2=102 
result3=101 

これは、スターの文字を検索する方法です。

+4

正確に定義するものは何ですか? – Isuka

+4

あなたの質問がどちらか分かりません – Pikoh

+0

「StartsWith」、「EndsWith」、および「Contains」の代わりにワイルドカードを使用して検索したいですか? – Silvermind

答えて

1

あなたは

例えば

Matching strings with wildcard

を参照してください、あなたは*正規表現を対応になることができますワイルドカードを探しています

private static String WildCardToRegular(String value) { 
    return "^" + Regex.Escape(value).Replace("\\?", ".").Replace("\\*", ".*") + "$"; 
    } 

その後正規表現いつものようにで動作:ワイルドカード

編集で作業する場合必要はStartsWithContainsEndsWithにありませんという通知、

using System.Text.RegularExpressions; 

    ... 

    var result = account 
    .FirstOrDefault(a => Regex.IsMatch(a.accountName, WildCardToRegular(search))) 
    .accountCode; //TODO: what if the outcome of FirstOrDefault is null? 

    var result2 = account 
    .FirstOrDefault(a => Regex.IsMatch(a.accountName, WildCardToRegular(search2))) 
    .accountCode; 

    var result3 = account 
    .FirstOrDefault(a => Regex.IsMatch(a.accountName, WildCardToRegular(search3))) 
    .accountCode; 

してください:あなたが必要とするすべての値が一致するようにするには、modif yクエリ:

var accountFound = account 
    .Select(a => a.accountName) 
    .SelectMany(acc => Regex 
    .Matches(acc, WildCardToRegular(search)) 
    .OfType<Match>() 
    .Where(match => match.Success) 
    .Select(match => match.Value)) 
    .FirstOrDefault(); 
+0

両側にリストがある場合、どのように式を急峻に適用できますか? つまり、リストから値を取得したい場合です。 – KdrGny

+0

@KdrGny:*一致する値を取得する場合は、 'Regex.IsMatch'の代わりに' Regex.Matches'を入力します。 –

関連する問題