У меня есть строки в форме: "[пользователь: fred] [приоритет: 3] Lorem ipsum dolor sit amet." где область, заключенная в квадратные скобки, является тегом (в формате [ключ: значение]). Мне нужно, чтобы иметь возможность удалить определенный тег дал это ключ, с помощью следующего метода расширения:help с тегом удаления regex
public static void RemoveTagWithKey(this string message, string tagKey) {
if (message.ContainsTagWithKey(tagKey)) {
var regex = new Regex(@"\[" + tagKey + @":[^\]]");
message = regex.Replace(message , string.Empty);
}
}
public static bool ContainsTagWithKey(this string message, string tagKey) {
return message.Contains(string.Format("[{0}:", tagKey));
}
только тег с указанным ключом должны быть удалены из строки. Мое регулярное выражение не работает, потому что оно глупо. Мне нужна помощь, чтобы написать его правильно. Альтернативно, реализация без регулярного выражения приветствуется.
Похоже, что исходный вопрос пытается использовать escape-код '' или '' 'внутри тега. –
Я получил вариацию этого, потому что оказалось, что мне нужны другие методы расширения для других вещей (например: Словарь <строка, строка> GetTags (это сообщение m), строка GetTagValue (это сообщение m, string tagKey) и т. Д. ..). Рефакторинг означал, что нет необходимости в регулярных выражениях. – grenade
@Drew Noakes: Я не думаю, что 'Regex (@ "\\ [" + tagKey + @ ": [^ \\]]"); делает то, что вы думали (может быть, не то, что думала граната!). Если вы представляете, что tagKey говорит «Zippy», регулярное выражение становится «\\ [Zippy: [^ \\]]», что означает «соответствие Zippy, за которым следует двоеточие, за которым следует один символ, который не является«] ». (Или, как вы отметили в своем ответе, вы можете положить + на конце, чтобы он соответствовал одному или нескольким символам, которые не являются «]».) Но он не делает ничего умного в том, чтобы избегать экранированных скобок, насколько я может работать (используя мой синтаксический анализатор регулярных выражений ...). – AAT