21

Visual Studio の検索ボックスで、"strB" ではなく "strA" を含むドキュメントのすべての行を取得するにはどうすればよいですか?

4

5 に答える 5

40

Visual Studio 2012 (およびそれ以降のバージョン) の場合:

^(?!.*strB).*strA.*$

説明:

^           # Anchor the search at the start of the line
(?!.*strB)  # Make sure that strB isn't on the current line
.*strA.*    # Match the entire line if it contains strA
$           # Anchor the search to the end of the line

(?:\r\n)?行の残りの部分と一緒に改行/改行も削除する場合は、正規表現の最後に追加することをお勧めします。

于 2009-11-25T08:26:15.287 に答える
18

Visual Studio 2010 (および以前のバージョン) の場合:

Visual Studio の検索ボックスには、独自の奇妙なバージョンの正規表現構文があります。この式は要求どおりに機能します。

^~(.*strB).*strA

^行の先頭に一致します。(通常、テキスト エディターには「複数行」オプションはなく^$常に行の境界で一致します。)

.改行を除く任意の文字に一致します。(通常はそうではありませんが、ドットを改行に一致させる「単一行」または「すべてドット」モードはないようです。)

~(...)(?!...)他のレスポンダーが使用する 否定先読み (

于 2010-02-06T11:54:07.723 に答える
1

検索ボックスが実際に一般的な正規表現を受け入れると仮定します。ネガティブ先読みの使用:

(?!^.*strB.*$)strA

複数行のオプションを設定する必要があります(行の開始/終了で一致します)^$ダイアログオプションを使用して設定できない場合は、次のことを試してください。

(?m)(?!^.*strB.*$)strA

ただし、これはおそらくそのエンジンのデフォルトモードです。

于 2009-11-25T08:28:54.160 に答える
1

否定的なルックアラウンドを使用しますが、用語の予想される位置 (または順序) がわからない場合、式は非常に複雑になります。順番やパターンはわかりますか

それ以外の場合は、ファイルを 1 行ずつ簡単にループ (またはコンプをリスト) し、inStr または Contains またはその他の単純で高速な論理テストを実行できる別のツールを使用することをお勧めします...

于 2009-11-25T07:12:32.940 に答える
0

これはVisual Studio 2010でうまくいきました:

^.+[^(strB)].+(strA).+[^(strB)].+$

于 2014-09-24T14:04:13.063 に答える