1

理由はわかりませんが、何らかの理由で Regex Split メソッドが頭に浮かびます。必要なものをチュートリアルで調べようとしていますが、何も見つからないようです。

私は単にExcelドキュメントを読んでいて、$145,000-$179,9992つの文字列を与えるように文字列をフォーマットしたいと思っています。145000179999。同時に、'$180,000-Limit単純に toのような文字列を削除したいと思い180000ます。

var loanLimits = Regex.Matches(Result.Rows[row + 2 + i][column].ToString(), @"\d+");

上記のコードは、、 、、 の'$145,000-$179,9994 つの部分に分割されているようです。私が求めていることを達成する方法についてのアイデアはありますか?145000179999

4

3 に答える 3

2

正規表現は文字ごとに正確に一致します (正規表現の「数字」または「単語」の概念についての知識はありません。式で自分で定義する必要があります)。使用している式\d+は、文字クラス を使用しています\d。これは、0 ~ 9 の任意の数字を意味します ( +1 つ以上に一致することを意味します)。したがって、式$145,000で、探している部分が数字だけで構成されていないことに注意してください。コンマも含まれます。したがって、正規表現は、正規表現に一致する文字の連続するすべてのグループ (数字の 4 つのグループ) を見つけます。

この問題にアプローチするには、いくつかの方法があります。

  1. ,正規表現に so を含めます。これは、数字またはコンマのいずれか(\d|,)+である行内の文字と同じ数だけ一致することを意味します。と の 2 つの一致があり、さらに でコンマを削除できます。(デモ)145,000179,999myStr.Replace(",", "")
  2. タイトルで言うように、数字以外の文字をすべて削除してください。Regex.Replaceしたがって、式で使用できます[^\d-]+-つまり、数字でもハイフンでもないものに一致し、それらを"". すると、結果は になります145000-179999。これを単純な非正規表現分割 で分割myStr.Split('-')して、2 つの部分を取得できます。(デモ)

2番目の例 ( ) では、最初の例で$180,000-Limit返された結果の数をカウントするために、追加のチェックが必要であることに注意してください。.MatchSplit

于 2012-12-08T01:48:36.187 に答える
1

RegEx を使用する代わりに、DotNet フレームワークに組み込まれている string および char メソッドを使用することもできます。入力文字列には常に単一のハイフンがあると仮定します。

string input = "$145,000-$179,999";

var split = input.Split( '-' )
        .Select( x => string.Join( "", x.Where( char.IsLetterOrDigit ) ) )
        .ToList();

string first = split.First(); //145000
string second = split.Last(); //179999
  1. Splitまず、標準的な方法を使用して文字列を分割します
  2. 次に、コレクション内の各アイテムから文字または数字のみを選択的に取得して、新しい文字列を作成します。x.Where...
  3. 次に、標準のJoin方法を使用して文字列を結合します
  4. 最後に、コレクションの最初と最後の項目を 2 つの文字列に使用します。
于 2012-12-08T02:33:35.253 に答える
1

に基づいて吐き出し、そこから数字のみを抽出することにより、各文字列を個別に処理することができます

 ArrayList mystrings = new ArrayList();
 List<string> myList = Result.Rows[row + 2 + i][column].ToString().Split('-').ToList();

 foreach(var item in myList)
 {

     string result = Regex.Replace(item, @"[^\d]", "");
     mystrings.Add(result);
 }
于 2012-12-08T01:51:56.543 に答える