Regex, чтобы заменить весь пароль с *** - PullRequest
1 голос
/ 28 февраля 2020

У меня есть следующее json:

Data: {"Account":"d\\adm","Password":"cWExZjEiMTM="},"SqlServer":{"InstanceName":"","MachineName":"MyMachine","Port":null}

Я хотел бы использовать RegExp для замены значения пароля на ***.

cWExZjEiMTM= => ***

В моем примере я ожидая следующий вывод:

Data: {"Account":"d\\adm","Password":"***"},"SqlServer":{"InstanceName":"","MachineName":"MyMachine","Port":null

У меня есть только следующее решение:

string invokeSpec = "\":{\"Account\":\"d\\\\adm\",\"password\":\"cWExZjEiMTM=\"},\"SqlServer\":{\"InstanceName\":\"\",\"MachineName\":\"MyMachine\",\"Port\":null}";
var pattern = "\\\"Password\\\":\\\"(?<pass>[^\\\"]*)\\\"";
var replaced = Regex.Replace(invokeSpec, pattern, "\"Password\":\"***\"", RegexOptions.IgnoreCase); 

":{"Account":"d\\adm","Password":"***"},"SqlServer":{"InstanceName":"","MachineName":"MyMachine","Port":null}

Ответы [ 2 ]

3 голосов
/ 28 февраля 2020

Я предлагаю использовать JObject вместо Password

var jObject = JObject.Parse(jsonString);
jObject["Password"] = "*****";
Console.WriteLine(jObject.ToString()); //save this value to log
1 голос
/ 28 февраля 2020

Как сказали люди в комментарии, если вы можете, используйте синтаксический анализатор JSON вместо регулярного выражения. Но давайте отклоним это, так как это не вопрос.

Вы фиксируете не ту часть своего ввода. То, что вы хотите - это подстановка .

string invokeSpec = "\":{\"Account\":\"d\\\\adm\",\"password\":\"cWExZjEiMTM=\"},\"SqlServer\":{\"InstanceName\":\"\",\"MachineName\":\"MyMachine\",\"Port\":null}";
var pattern = "(\\\"password\\\":\\\")[^\\\"]*(\\\")";
var replaced = Regex.Replace(invokeSpec, pattern, "$1***$2", RegexOptions.IgnoreCase);

. Как вы видите, мы собираем две группы, части, между которыми находится пароль. Итак, регулярное выражение состоит из 3 частей:

  • (\\\"password\\\":\\\") => Часть слева от пароля
  • [^\\\"]* => сам пароль (обратите внимание, что в В вашем примере вы можете заменить это на ненадежное .*?)
  • (\\\") => Часть справа от пароля

И мы ссылаемся на них с помощью $1 и $2 в методе замены, заменив исходный пароль на ***.

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