Регулярное выражение - заменить конкретную строку на основе другого условия строки - PullRequest
2 голосов
/ 17 апреля 2019

Я занимаюсь заменой многих строк кода. Что мне нужно сделать, это заменить конкретную строку в зависимости от различных условий. Вот строка:

private IWebElement UserList_Link { get; set; }

Мне нужно заменить { get; set; } другой строкой, например =something Очевидно поставить в поиск { get; set; } и заменить все. Но он мне нужен только для строк, содержащих private IWebElement.

Итак, последняя строка должна выглядеть так:

private IWebElement UserList_Link = element;

Я попробовал регулярное выражение с положительным взглядом вперед, как это, но он принимает слово перед фигурной скобкой:

(? <= IWebElement \ w) (. *) </p>

Я не уверен, как это сделать. Не могли бы вы помочь мне с кем-нибудь?

Ответы [ 3 ]

0 голосов
/ 17 апреля 2019

Используйте следующее regex:

(private IWebElement.*?) ({ get; set; })

Демо

Замена с использованием C #:

string str = "private IWebElement UserList_Link { get; set; }";
str = Regex.Replace(str, @"(private IWebElement.*?) ({ get; set; })", "$1 = element");
Console.WriteLine(str);

$1 означает первую группу соответствия регулярному выражению.

0 голосов
/ 17 апреля 2019

В диалоге поиска и замены Visual Studio 2017 вы можете использовать

Найти : (?<=IWebElement\s+\w+\s+){[^{}]*} Заменить : = element

См. это демо .NET regex .

Здесь (?<=IWebElement\s+\w+\s+) является положительным взглядом, который соответствует местоположению встрока, которой непосредственно предшествуют IWebElement, 1+ пробелов, 1+ слов символов, 1+ пробелов.Он имеет переменную ширину и работает с ограниченными двигателями регулярных выражений.Затем {[^{}]*} соответствует и использует {, 0 или более символов, отличных от { и }, а затем }.

Вы также можете использовать более распространенное регулярное выражение без переменной ширины.взгляд назад:

Найти : (IWebElement\s+\w+\s+){[^{}]*} Заменить : $1= element

См. это демонстрационное выражение regex .

A Regulex график:

enter image description here

Здесь (IWebElement\s+\w+\s+) является группой захвата с ID = 1, и вы можете ссылаться на ее содержимое с $1 обратной ссылкой из шаблона замены.Если после $1 есть цифра, используйте ${1} однозначную форму.

0 голосов
/ 17 апреля 2019

Вы можете использовать позитивный взгляд

^(?=private IWebElement.*)(.*){ get; set; }$
  • ^ - начало строки
  • (?=private IWebElement.*) - Позитивный взгляд, чтобы сделать private IWebElement обязательным в матче
  • (.*) - сопоставить любую вещь, кроме новой строки (захваченная группа)
  • $ - конец строки

Демо

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