Visual Studio Найти и заменить символы на обоих концах строки - PullRequest
0 голосов
/ 16 мая 2018

Может кто-нибудь сказать мне, как я могу использовать Visual Studio Find and Replace в файлах (Ctrl + Shift + H), чтобы найти все вхождения:

<TextBox*IDTextBox"

и изменить его на:

<Button*IDButton"

где подстановочный знак * представляет произвольную строку.

У меня определено много текстовых полей, и я хочу переопределить их как кнопки.Например….

<TextBox x:Name="Name1IDTextBox" Grid.Column="1"
<TextBox x:Name="Name2IDTextBox" Grid.Column="1"
<TextBox x:Name="Name3IDTextBox" Grid.Column="1"

Становится ...

<Button x:Name="Name1IDButton" Grid.Column="1"
<Button x:Name="Name2IDButton" Grid.Column="1"
<Button x:Name="Name3IDButton" Grid.Column="1"

Подстановочный знак * представляет x: Name = "Name1

Я знаю, что есть много примеров, новсе они в C #, и я не могу перевести их, чтобы сохранить содержимое подстановочного знака с помощью окна поиска и замены.

Я пробовал

enter image description here

но все, что мне дало, было <Button.*IdentityIDButton", когда я хочу символы, представленные *.

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Сначала включите Регулярные выражения в форме поиска и замены. В полном диалоге есть флажок для этого. Во всплывающем окне «Быстрый поиск» переключите третий значок под условиями поиска:

Screenshot

Если вы хотите сопоставить точно структуру элемента, которую вы указали, заполните следующие термины:

Поиск : <(TextBox) x:Name="([^"]*)\1"
Заменить : <Button x:Name="$2Button"

Тем не менее, вы можете сделать некоторые незначительные изменения для обработки случаев, когда x:Name не является первым атрибутом или когда x:Name появляется в отдельной строке. Это может быть очень удобно, если в ваших декларациях есть несоответствия.

Поиск : <(TextBox)(\s+[^>]*)x:Name="([^"]*)\1"
Заменить : <Button$2x:Name="$3Button"

Последний успешно преобразует следующее:

<TextBox Grid.Column="1" x:Name="Name1IDTextBox" />
<TextBox
  x:Name="Name2IDTextBox" Grid.Column="1" />
<TextBox x:Name="Name3IDTextBox" Grid.Column="1" />

... в:

<Button Grid.Column="1" x:Name="Name1IDButton" />
<Button
  x:Name="Name2IDButton" Grid.Column="1" />
<Button x:Name="Name3IDButton" Grid.Column="1" />

Классы персонажей

Вы спрашивали о наличии [^"] и [^>] в моих шаблонах поиска. Это классов символов . [abc] говорит "соответствует символу a, b или c" . [a-z] означает "соответствует любому символу от a до z" . Если первый символ в скобках - ^, то класс символов отрицается, например, [^abc] означает ", соответствует любому символу , за исключением a, b или c ".

В моем случае я использовал [^>]*, чтобы сожрать любые символы , за исключением >, потому что я хотел захватить только атрибуты между <TextBox и x:Name. Я никогда не хочу запечатлеть за конец элемента. Если, например, не является атрибутом x:Name, я бы не хотел совпадать с Grid.Column="1" OtherProperty="X" /> ... more elements ... <Label x:Name.

Аналогично, я использую [^"], чтобы убедиться, что я не потребляю никаких символов за пределами конца строки.

0 голосов
/ 16 мая 2018

В приведенном вами примере достаточно заменить TextBox на Button. Если ваша реальная проблема сложнее, вы можете использовать обратные ссылки.

Включить регулярные выражения в диалоговом окне замены, а затем:

В Найдите, что часть диалога типа <TextBox(.*)IDTextBox"

В Заменить на тип детали <Button$1IDButton"

Скобки вокруг .* охватывают все, что соответствует .*. $1 относится к этому захвату и может использоваться при замене.

Find and replace dialog

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...