Массовый поиск и замена подстановочными знаками или регулярным выражением MyString.Length to Len (MyString) - PullRequest
1 голос
/ 15 октября 2010

У меня большой проект ASP.NET, в котором я хочу выполнить массовый поиск и заменить (около 3500 экземпляров)

Я хочу изменить

If strErrorMessage.Length > 0

If strSomeString.Length > 0

If strWhatever.Length > 0

и любой другой аналогичный вызов метода Length из строки в следующую

If Len(strErrorMessage) > 0

If Len(strSomeString) > 0

If Len(strWhatever) > 0

В любом случае, чтобы надежно сделать это за один выстрел?

Я могу сделать поиск и заменить что-то вроде

If *.Length > 0 --> If Len(*) > 0 

Это просто не сработает, поскольку не поймет, как правильно его переставить. В настоящее время в моем распоряжении VS2010 и N ++.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 15 октября 2010

О комментарии Ахмеда. Вероятная причина здесь в том, что метод length является методом instance и, как таковой, при вызове строковой переменной, которая имеет значение null, приведет к ошибке.

LEN, с другой стороны, больше похож на метод расширения и просто вернет 0, независимо от того, является ли строка нулевой или строкой, которая не содержит символов. Лен работает намного больше как len должно работать на мой взгляд.

Но вернемся к вопросу.

Вы проверили

http://rxfind.codeplex.com/

Инструмент поиска и замены регулярных выражений в командной строке. Это должно быстро сделать эту работу.

1 голос
/ 15 октября 2010

Используя Visual Studio Find / Replace (с включенными параметрами регулярных выражений), вы можете использовать это:

Найти что: If {:a+}\.Length \> 0

Заменить на: If Len(\1) \> 0

Объяснение модели:

  • :a+ = :a соответствует буквенно-цифровому символу, а + соответствует хотя бы одному вхождению
  • {} in {:a+} = метод регулярных выражений в Visual Studio для «тегирования» (т.е. захвата) выражения
  • \> = > необходимо экранировать с помощью обратной косой черты, поскольку это метасимвол в этом виде регулярного выражения.
  • \1 = относится к тексту, который соответствует теговому выражению. Число 1 относится к первому (и в этом случае единственному) теговому выражению.

Подробнее о справочнике по MSDN regex для Find / Replace можно прочитать здесь .

Как я уже упоминал в своем комментарии, я думаю, что использование Len() является шагом назад и связывает ваш код с пространством имен Microsoft.VisualBasic. @ drventure поднял хорошую точку , так как вызов .Length для нулевого значения вызовет исключение. Вместо проверки длины вы можете использовать String.IsNullOrEmpty . В .NET 4.0 вы также можете использовать String.IsNullOrWhiteSpace .

Вместо If strErrorMessage.Length > 0 вы можете использовать:

If Not String.IsNullOrEmpty(strErrorMessage) Then
' or '
If Not String.IsNullOrWhiteSpace(strErrorMessage) Then

Если вы заинтересованы в использовании этого, вы можете сохранить исходный шаблон «Найти что» и изменить шаблон «Заменить на» следующим образом: If Not String.IsNullOrEmpty(\1)

...