Regex: как получить все строки, содержащие strA, но не strB в Visual Studio

Как я могу получить все строки документа , содержащие "strA", но не "strB", в поле поиска Visual Studio?

Ответ 1

Для 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)? в конец регулярного выражения, если вы также хотите удалить возвращаемые каретки/линейные каналы вместе с остальной частью строки.

Ответ 2

Для Visual Studio 2010 (и предыдущих версий):

Окно поиска Visual Studio имеет свою собственную, необычную версию синтаксиса регулярных выражений. Это выражение работает по запросу:

^~(.*strB).*strA

^ соответствует началу строки. (Обычно для текстового редактора нет опции "multiline", ^ и $ всегда совпадают на границах строк.)

. соответствует любому символу, кроме новой строки. (Не так, как правило, не существует режима "однострочный" или "точка-все", который позволяет точкам соответствовать символам новой строки.)

~(...) является конструкцией "предотвратить совпадение", эквивалентной (насколько я могу судить) негативному обзору ((?!...)), используемому другими респондентами.

Ответ 3

Вы использовали бы Отрицательные образы, но выражение очень сложно, если вы не знаете ожидаемую позицию (или даже порядок) термины. Знаете ли вы порядок или образец?

В противном случае я бы посоветовал вам использовать еще один инструмент, который мог бы просто скомпоновать цикл (или список comp) через файл по строкам и делать inStr или Contains или другие простые, быстрые логические тесты...

Ответ 4

Я собираюсь предположить, что окно поиска фактически принимает общие регулярные выражения. Использование отрицательного вида:

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

Вам нужно установить многострочные параметры (^ и $ в начале/в конце строк). Если вы не можете установить его с помощью параметров диалога, попробуйте:

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

Это, вероятно, режим по умолчанию в этом движке.

Ответ 5

Это работало для меня с Visual Studio 2010:

^. + [^ (STRB)]. + (Стр). + [^ (STRB)]. + $