ASP.NET Регулярное выражение: как мне заменить все вхождения Eval (?????)

#asp.net #regex #visual-studio

#asp.net #регулярное выражение #visual-studio

Вопрос:

У меня это происходит сотни раз в нашем проекте (с одним пробелом с обеих сторон):

 Eval("RandomDataName")
  

Я хочу заменить это на (с одним пробелом с обеих сторон):

 H(Eval("RandomDataName"))
  

Прямо сейчас у меня есть,

 Eval({.*}) 
  

И заменить на:

 H(Eval(1)) 
  

Это работает, но не в строках, в которых есть несколько Eval, поскольку оно выбирает их все в одной строке. Как я могу это исправить? Я пробовал использовать .*? и это не работает.

Ответ №1:

Вам нужно быть более явным, текущее регулярное выражение слишком жадное.

Например, скажем, у вас есть это в строке.

 Eval("Test") Eval("Another") Eval("Yet one more")
  

Ваше регулярное выражение будет соответствовать Eval( и продолжится до самого последнего ) , фиксируя все промежуточное. Самый простой способ заставить это работать, вероятно, будет иметь «белый список» ожидаемых символов. Что-то вроде:

 Eval([a-zA-Z0-9" ]*)
  

Это должно соответствовать Eval( , затем соответствовать кавычкам, буквенно-цифровым символам и пробелам ноль или более раз и затем, наконец, соответствовать завершению ) каждого Eval() оператора.

Я бы рекомендовал добавить несколько примеров Eval() операторов в RegExr и протестировать некоторые регулярные выражения и посмотреть, что работает для вашего набора данных.

Комментарии:

1. Спасибо! Это было очень полезно.