2

C#で正規表現を使用する方法はありますが、(Regex.Matchを使用して)正規表現の一部のみを返しますか?例えば、

string input = "Hello my friend!";
string pattern = "\\w+ my friend.";
Console.WriteLine(Regex.Match(input, pattern)); //Returns "Hello my friend!"

しかし、「こんにちは」、または最後の句読点だけが必要な場合はどうなりますか?^\\w+「 」(または単に.split(' ')[0])のようなことができることはわかっていますが、それは任意の入力の最初の単語と一致し、残りが「my friend.」と一致する場合にのみ最初の単語と一致するようにします。これを行うための任意の方法、またはそれを行うだけの方が簡単でしょうか

string input = "Hello my friend!";
string pattern = "\\w+ my friend.";
if (Regex.IsMatch(input, pattern))
{
    Console.WriteLine(input.Split(' ')[0]);
}
else
{
    Console.WriteLine("");
}

(これが本当に単純な場合、または何かが足りない場合は、申し訳ありませんが、Regexsを実際に使い始めたばかりです)

ありがとう、

マシュー

4

4 に答える 4

1

他の回答で提案されているキャプチャグループとは別に、先読みを使用することもできます。したがって、のような式を使用する"\\w+(?= my friend)"と、一致全体が部分のみを返し\\w+ます。

一般に、およびが正規表現である形式のパターンは、その後に続くが一致a(?=b)しない場合にのみ一致します。ababb

于 2012-04-29T22:11:54.723 に答える
0

または、先読みでそれを行うこともできます(c#をテストする方法がないため、テストされていません)

"\\w+(?=\\s+my friend)"
于 2012-04-29T22:12:03.483 に答える
0

「グループ」を使用して、文字列の特定の部分をキャプチャできます。たとえば、で名前をキャプチャしたいとしますHello, John!。私たちの正規表現は次のようになります。

/Hello, (.+)/

(グループ)演算子は、その中の()すべてをキャプチャします。次に、次のコードを使用して名前を取得できます。

var regex = new Regex(@"Hello, (.+)");
var match = regex.Match("Hello, John");

System.Console.WriteLine("Your name is {0}.", match.Groups[1]); // Your name is John.
于 2012-04-29T22:08:23.320 に答える
0

正規表現内でグループをキャプチャすることを探していると思います。括弧を使用してキャプチャグループを識別できます。あなたの特定の例のために:

string input = "Hello my friend!";
string pattern = "(\\w+) my friend";
var match = Regex.Match(input, pattern);
Console.WriteLine(match.Groups[1]); // Prints "Hello"
于 2012-04-29T22:08:36.400 に答える