0

入力:

こんにちは私の名前はXです。何とか何とか何とか

編集1:すべてのユーザーがXで置き換えられた自分の名前を入力できます。したがって、 Xは変数の長さを持つ変数です。

必要な出力:

こんにちは私の名前はAhmedです
。X=Ahmed

パターン :

(Hello my name is .+)\.

本当に、これは初心者の質問です:( 、、私はちょうど学び始めます。機能して
いません!

4

3 に答える 3

2

あなたのパターンが何を達成しようとしているのかまったくわからないので、最初から始めます. あなたがしたいことは、一致することですHello my name is X。私たちはそのようにすることができます。

/Hello my name is X\./

しかし、文字Xをキャプチャするのではなく、X の場所にあるものと一致させたいのです。したがって、正規表現は次のようになります。

/Hello my name is .+\./

そのため、以前の正規表現は任意の文字に 1 回以上一致するようになりました。これをキャプチャして、正規表現の外で使用したいと思います。これは、capture, (), 演算子で行うことができます。

/Hello my name is (.+)\./

問題は、「どうやって捕獲するか」です。まあRegex.Matchを返しますMatch。現在、正規表現からのすべてのキャプチャのコレクションであるMatchというプロパティがあります。Groups最後のコードは次のとおりです。

var match = Regex.Match("Hello my name is dunsmoreb.", @"Hello my name is (.+)\.");
Console.WriteLine(match.Groups[1]); // Prints `dunsmoreb`.
于 2012-05-03T00:22:47.133 に答える
1

バックスラッシュを含む正規表現が表示された場合、正規表現エンジンによってリテラルのバックスラッシュとして解釈される必要があります。これは、プログラミング言語\が文字列のエスケープに使用する場合\、正規表現のすべての文字列で必要\\になることを意味します。

たとえば、正規表現Hello my name is (.+)\.を使用するには、次の文字列を使用する必要がある場合があります。

"Hello my name is (.+)\\."

これは、たとえば「Hello my name is Ahmed. Blah blah.」のような文字列など、必要な正確な正規表現ではない可能性があることに注意してください。(.+)貪欲なので、名前として「Ahmed.Blah blah」を取得します。これを修正する(.+)ために toを変更することはできますが、名前に有効な文字 (「JRR Tolkien」など) を使用すると、十分に一致しないという同様の問題が発生します。(.+?).

于 2012-05-03T00:40:34.857 に答える
0

以下を使用します。

Hello my name is (\w+)

(\w+)単語を構成する文字に一致します。名前にスペースが含まれている場合、'John Doe' と言うと、'John' のみに一致します。

正規表現の使用法について詳しくは、http: //msdn.microsoft.com/en-us/library/az24scfc.aspxを参照してください。

于 2012-05-03T00:22:16.210 に答える