0

「{0}は{1}よりも大きい」などの文字列形式を使用する代わりに、文字列連結のスタイルで実行された、アプリケーションでのlog4netへの何千もの呼び出しがあります。

そこで、Regexを使用してすべての.csファイルを解析し、log4netログステートメントを見つけるプログラムを作成しました。括弧()で囲まれたコードを抽出し、メソッドを呼び出して再フォーマットし、結果を返します。次に、ソースコードファイルを書き換えます。

この質問は、ログステートメントを再フォーマットする方法に関連しています。

文字列の引数を受け取り、文字列を返します。

ログステートメントのサンプルは次のとおりです。

"Column " + column + " Seq Cnt: " + sequentialCount + ": Seq Avg: " + (sequentialTotal / sequentialCount) 
"Opening file for writing copy protection failed. Retrying.", ex
"for assert " + value.ToString("X")
"ExpirationTime()"
"count = " + count + ", round << " + count + " = " + (round << count)
"Total Diff Bytes = " + (7*count)
(series.Count - i - 1) + " " + series.Time[i] + " O,H,L,C:" + series.Open[i].ToDouble() + "," +
                            series.High[i].ToDouble() + "," + 
                            series.Low[i].ToDouble() + "," + 
                            series.Close[i].ToDouble()
"Recovered orders from snapshot: \n" + OrderStore.OrdersToString()

基本的に、MatchEvaluatorでRegex.Replace()を使用することを計画する必要があるようです。

Regex.Replaceの正しい正規表現は何ですか?

これらは要件のようです:

  1. 基本的に、文字列 "\ s * + \ s *(。*)\ s +"で各割り込みを見つけます(単純化されすぎています)。
  2. 各一致を文字列内の{0}形式のトークンに置き換えてから、指定された値を引数としてメソッドに配置します。
  3. 例外への参照があるlog.Debug( "message"、ex)形式のデバッグメソッドを識別してスキップする必要があります。

もちろん、コードはDebugFormat()InfoFormat()などへの呼び出しを切り替えます。

上記の正規表現の問題は、これが最初の一致として一致することです。

"+ column +" Seq Cnt: "+シーケンシャルカウント+"

それ以外の:

"+列+"

一部の値には追加のプラスがあるか、メソッドの引数として引用符を使用しているため、(。)または([^ +] *)の代わりに([^ "])を単純に使用することはできません。

したがって、パターン\ s + \ s "に一致する場合を除いて、すべての文字に一致すると言う方法が必要です。これは、プラス記号の後にオプションの空白で区切られた引用符が続くことを意味します。

4

1 に答える 1

1

数量詞を怠惰にすることができます。例えば:

"\s*\+\s*(\S.*?)\s*\+\s*"
于 2012-06-15T14:58:53.070 に答える