0

私はリストを持っています:

List<string> str = new List<string>();  
str.Add("asdf---US,IN");  
str.Add("asdg---UK,IN");  
str.Add("asjk---RU,IN");  
str.Add("asrt---IT,DE");

「IN」と入力すると、( "asdf"、 "asdg"、 "asjk")のようなリストが表示されます。このために私はやっています:

System.Text.RegularExpressions.Regex regEx = 
        new System.Text.RegularExpressions.Regex("asr", 
        System.Text.RegularExpressions.RegexOptions.IgnoreCase);
List<string> str = new List<string>();  
str.Add("asdf---US,IN");  
str.Add("asdg---UK,IN");  
str.Add("asjk---RU,IN");  
str.Add("asrt---IT,DE"); 
var getArray = str.Where<string>(item => regEx.IsMatch(item)).ToList<string>();
str = getArray.ToList();

strは正しい結果を出しています。ただし、「asdf --- US、IN」、「asdg --- UK、IN」、「asjk --- RU、IN」などのアイテム全体が含まれています。リスト内のアイテムの最初の4文字、つまり'asdf "、" asdg "、" asjk "のみが必要です。必要なリストを取得するには、ラムダ式にどのような条件を設定できますか?

4

2 に答える 2

1

最初の4文字だけになる場合は、string.SubStringを使用します。

var getArray = str.Where(item => regEx.IsMatch(item))
                  .Select(r=> r.Substring(0,4))
                  .ToList();

また、とで<string>キャストを指定する必要はありません。リスト内のアイテムはすでに文字列型です。whereToList

編集:

「IN」で終わる文字列のみを探している場合は、正規表現を削除してstring.EndsWithを使用できます。

var getArray = str.Where(item => item.EndsWith("IN"))
                  .Select(r=> r.Substring(0,4))
                  .ToList();
于 2012-09-19T07:22:37.630 に答える
0

正規表現は

.*?(?=---.*?IN)

クエリは次のようになります

var getArray = str.Where<string>(item => regEx.IsMatch(item)).Select<string>(item => regEx.Match(item)).ToList<string>();
于 2012-09-19T07:25:12.317 に答える