3

文中のスペース間の単語を検索したい。したがって、検索語の前後の最初のスペースまでの単語

This is anexampleof what I wantanexampleof私の検索語がexample

私は今この正規表現を持っています"(?:^|\S*\s*)\S*" + searchword + "\S*(?:$|\s*\S*)"が、これは最初と最後に余分な言葉を与えてくれます. 'これは私が欲しいものの例です' --> 'これは何の例ですか' を返します

正規表現を変更しようとしましたが、まったく得意ではありません..私はc#を使用しています。助けてくれてありがとう。

完全な C# コード:

MatchCollection m1 = Regex.Matches(content, @"(?:^|\S*\s*)\S*" + searchword + @"\S*(?:$|\s*\S*)",
                              RegexOptions.IgnoreCase | RegexOptions.Multiline);
4

1 に答える 1

3

最後に非キャプチャ グループを単純に除外できます。

@"\S*" + searchword + @"\S*";

貪欲さにより、両側にできるだけ多くの非スペース文字を取得します。

また、非捕獲グループの考えは、彼らが試合に含まれていないということではありません. 彼らが行うのは、サブマッチのキャプチャを作成することだけではありません。何かがあることを確認したいが、それを一致に含めたくない場合は、ルックアラウンドが必要です。

@"(?<=^|\S*\s*)\S*" + searchword + @"\S*(?=$|\s*\S*)"

ただし、この場合、これらのルックアラウンドは実際には何もしません。これ\s*\S*は、空の文字列で満たされるためです (*両方の文字がオプションになるため)。しかし、さらに参考までに...マッチの一部であってはならない、マッチの境界でアサーションを行いたい場合は、ルックアラウンドが最適です。

于 2012-12-11T11:59:52.747 に答える