Как я могу получить все строки документа , содержащие "strA", но не "strB", в поле поиска Visual Studio?
Regex: как получить все строки, содержащие 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)]. + $