9

アドバイスが必要です。次の文字列があるとします。Read Variable 文字列内でこのようなテキストをすべて検索し、それらすべてを次のようにしますVariable = MessageBox.Show。したがって、追加の例として:

"Read Dog" --> "Dog = MessageBox.Show"
"Read Cat" --> "Cat = MessageBox.Show"

手伝って頂けますか?C#でRegExを使用するための迅速なアドバイスが必要です。ワイルドカードを使った仕事だと思いますが、使い方がよくわかりません…また、明日の学校のプロジェクトでも必要です…ありがとうございます!

編集:これは私がこれまでに行ったことであり、機能しません:Regex.Replace(String, "Read ", " = Messagebox.Show")

4

3 に答える 3

11

あなたはこれを行うことができます

string ns= Regex.Replace(yourString,"Read\s+(.*?)(?:\s|$)","$1 = MessageBox.Show");

\s+1対多のスペース文字に一致します

(.*?)(?:\s|$)最初のスペース(つまり\s)まで、または文字列の最後に到達するまで(つまり$) 、0から多くの文字に一致します

$1最初にキャプチャされたグループを表します。(.*?)

于 2012-11-18T17:59:43.877 に答える
6

あなたはあなたの質問を明確にしたいかもしれません...しかしここに行きます:

正規表現の「読み取り」の後の次の単語を一致させる場合Read (\w*)\w、は単語の文字クラスで*あり、は貪欲な一致演算子です。

正規表現の「読み取り」以降のすべてに一致させる場合は、Read (.*)$where.を使用してすべての文字に一致し、$行末を意味します。

$1 = MessageBox.Showどちらの正規表現でも、$ 1が最初に一致したグループ(括弧で示されている)を参照するため、の置換を使用できます。

完全なコード:

replacedString = Regex.Replace(inStr, @"Read (.*)$", "$1 = MessageBox.Show");
于 2012-11-18T18:04:48.540 に答える
5

試行の問題は、変数の後に置換文字列を挿入する必要があることを認識できないことです。有効な変数名に文字、数字、アンダースコアが含まれていると仮定しましょう(これらは便利に一致させることができます\w)。つまり、他の文字は変数名を終了します。次に、変数名を照合し、(括弧を使用して)キャプチャして、次のように置換文字列に入れることができます$1

output = Regex.Replace(input, @"Read\s+(\w+)", "$1 = MessageBox.Show");

\s+1つ以上の任意の空白文字に一致することに注意してください。\w+1つ以上の文字、数字、およびアンダースコアに一致します。変数名を文字のみに制限したい場合は、ここで変更します。

output = Regex.Replace(input, @"Read\s+([a-zA-Z]+)", "$1 = MessageBox.Show");

これが良いチュートリアルです。

最後に、C#では、正規表現を逐語的な文字列(@"...")として記述することをお勧めします。そうしないと、バックスラッシュが正規表現エンジンに到達するように、すべてを二重にエスケープする必要があります。これにより、正規表現の可読性が大幅に低下します。

于 2012-11-18T18:00:01.453 に答える