Замена регулярных выражений C# с игнорированием совпадений, найденных в строковых кавычкахC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Замена регулярных выражений C# с игнорированием совпадений, найденных в строковых кавычках

Сообщение Anonymous »


Я работаю в приложении, где системные администраторы могут создавать настраиваемые поля и настраивать вычисления для разрешения значений в этих полях. Эти вычисления сохраняются как строковое свойство объекта CustomField. Мне поручено провести массовую очистку этих вычислений, в основном сосредоточившись на замене функций и операторов конъюнкции на их сокращенные варианты. Я хочу использовать метод RegEx.Replace() для решения этой задачи в решении .NET C#.

Пример строки расчета (пользователи вводят Calc в синтаксисе VB.NET):

IIF([FIELD1] = «Это и то» AND [FIELD2] = «Это или то», «Значение 1», IIF ([FIELD3] = «Это и то» ИЛИ [FIELD4] = «Это или то», «Значение 2», "")) Требования задачи:
[*]Замены: IIF -> IF, And -> AndAlso, Or -> OrElse [*]Поиски/совпадения не должны учитывать регистр для всех выполняемых замен, поскольку разные администраторы используют разный регистр при написании синтаксиса. [*]Для функции IIF необходимо найти как «IIF(» (синтаксис с левой круглой скобкой сразу после «F»), так и совпадения с переменным количеством пробелов (не пробелов, а только обычных пробелов) между « F" и левая скобка. Это основано на наблюдениях за тем, как я вижу вычисления, написанные в среде моего клиента. [*]Для обеих фраз И/ИЛИ необходимо найти экземпляры с начальным/конечным пробелом и убедиться, что фраза не является частью строки в кавычках. Таким образом, в приведенном выше примере строки вычисления допустимые операторы соединения будут заменены, но строки и/или в «Это и то» и «Это или это» будут проигнорированы и пропущены.
Ниже приведен пример того, что у меня есть в качестве отправной точки. Я считаю, что у меня правильный шаблон функции IIF, используя «альтернативный» | символ канала, чтобы выполнить сопоставление «или/или» для этой фразы, но я застрял в том, как настроить шаблоны «И/ИЛИ», чтобы исключить замену совпадений, содержащихся в строках.

foreach (CustomFieldInfo customField в Session.ConfigurationManager.GetCustomFields(false)) { строка fieldCalcStr = customField.Calculation.Trim(); если (string.IsNullOrEmpty(fieldCalcStr)) продолжить; fieldCalcStr = Regex.Replace(fieldCalcStr, @"IIF\(|IIF *\(", "IF(", RegexOptions.IgnoreCase); fieldCalcStr = Regex.Replace(fieldCalcStr, «AND», «AndAlso», RegexOptions.IgnoreCase); fieldCalcStr = Regex.Replace(fieldCalcStr, «OR», «OrElse», RegexOptions.IgnoreCase); customField.Calculation = fieldCalcStr; } ПРИМЕЧАНИЕ. Здесь я видел множество сообщений, в которых люди пытались выполнить что-то относительно похожее, но во всех случаях ответы были очень специфичны для входной строки, предоставленной ОП, и делали предположения, которые отображали предлагаемые ответы. не применимо к моему случаю использования и конкретным требованиям.

Любая помощь приветствуется.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»