2

次のコードがあります。

private void button_borrow_Click(object sender, EventArgs e)
    {
        Regex filter = new Regex(@"[0-9]*");
        String items = "";
        var selectedItems = checkedListBox_bookview.CheckedItems;
        foreach (var item in selectedItems)
        {

        }
        MessageBox.Show(items.ToString() + " Were selected: " + selectedItems.Count);
    }

から一致した文字列を取得したいfilter。どうすればいいですか?

4

2 に答える 2

7

Regex.IsMatchメソッドを使用して、正規表現が入力文字列で一致するものを見つけるかどうかを確認します。例えば

    foreach (var item in selectedItems)
    {
         if (filter.IsMatch(item.ToString())
             // matched
    }

ところで[0-9]*、入力文字列に数字を含める必要がないため、これは何にでも一致することに注意してください。おそらくあなたは必要です^\d+$

更新:一致する番号を取得する:

Regex filter = new Regex(@"(\d+)");

foreach (var item in checkedListBox1.CheckedItems)
{
    var match = filter.Match(item.ToString());
    if (match.Success)
    {
        MessageBox.Show(match.Value);
    }    
}
于 2013-02-20T13:09:41.067 に答える
3

すべての一致を見つけるには、.Matches()を使用して、返されたコレクションを繰り返す必要があります。

もう1つの良い方法は、実行するたびにパフォーマンスが低下しないように正規表現をコンパイルすることです。これを行うには、クラスの静的フィールドに割り当てて、「RegexOptions.Compiled」を使用します。

シナリオをサポートするために簡単に変更できる小さな例を次に示します。

class Program {
    private static Regex _filterRegex = new Regex(@"[0-9]+", RegexOptions.Compiled);

    static void Main(string[] args) {
      foreach (Match match in _filterRegex.Matches("1,2,3,4,5,6")) {
        Console.WriteLine("Match: " + match.Value);
      }
    }
  }
于 2013-02-20T14:31:23.540 に答える