Regex escape ставьте "\\" после astreik, а не перед asterik - PullRequest
0 голосов
/ 13 февраля 2019

Мне нужна помощь, чтобы удалить "\" перед звездочкой и поставить его после звездочки, как описано в примерах ниже -

string str = "*10.18).xlsx"; //Other Inputs - *.18).xlsx, *.10.18).xlsx, *(23.10.18).xlsx
string reg = "id:" + Regex.Replace(str, @"[][+&|!(){}^""~*?: \\/-]", "\\$&");

Current Output :
reg = id:\\*10.18\\).xlsx
Required Output :
reg = id:*\\10.18\\).xlsx

More example :
Input - id:*(23.10.18).xlsx
Required Output - id:*\\(23.10.18\\).xlsx

1 Ответ

0 голосов
/ 13 февраля 2019

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

var strs = new List<string> { "*10.18).xlsx", "*(23.10.18).xlsx" };
var block = @"[][+&|!(){}^""~?: \\/-]";
var rx = new Regex($@"(\*)({block}?)|{block}");
foreach (var str in strs) {
    string reg = "id:" + rx.Replace(str, m =>
        m.Groups[1].Success ? $"*\\{m.Groups[2].Value}" : $"\\{m.Value}");
    Console.WriteLine(reg);
}

См. Демонстрацию C # .Вывод: id:*\10.18\).xlsx (для *10.18).xlsx) и id:*\(23.10.18\).xlsx (для *(23.10.18).xlsx).

Шаблон будет соответствовать

  • (\*)([][+&|!(){}^""~?: \\/-]?) - звездочка занесена в группу1 и любой из символов в блоке, 1 или 0 раз (необязательно)
  • | - или
  • [][+&|!(){}^""~?: \\/-] - класс символов, соответствующий ], [,+, &, |, !, (, ), {, }, ^, ", ~, ?, :, , \, / и -

Если совпадение группы 1 соответствует, совпадение заменяется значением *\ + группы 2, в противном случае обратный слеш предшествует передсоответствующий символ.

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