我有形式的字符串:“[用户:弗雷德] [优先:3]洛雷姆ipsum dolor坐amet。”用方括号括起来的区域是一个标签(格式为[key:value])。我需要能够删除特定的标签给它在以下方面扩展方法的关键:帮助与标记删除正则表达式
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));
}
只有具有指定键标记应该从字符串中删除。我的正则表达式不起作用,因为它很愚蠢。我需要帮助才能正确编写它。另外,一个没有正则表达式的实现是受欢迎的。
它看起来像原来的问题是试图迎合标签内的['或']'标签。 – 2009-09-29 11:59:28
我结束了这个变化,因为它证明我需要更多的扩展方法来处理其他的东西(例如:Dictionary GetTags(this message m),string GetTagValue(this message m,string tagKey)等。 ..)。重构意味着不需要正则表达式。 –
grenade
2009-09-29 12:10:23
@Drew Noakes:我不认为'正则表达式(@“\\ [”+ tagKey + @“:[^ \\]]”);'正在做你认为的事情(也许不是什么手榴弹的想法!)。如果你认为tagKey是“Zippy”,那么正则表达式变成'\\ [Zippy:[^ \\]]',意思是“匹配Zippy后跟一个冒号,后面跟一个不是”的字符]。 (或者正如你在答案中提到的那样,你可以在最后加一个+使其与一个或多个不是“]”的字符相匹配。)但是,就我而言,避免转义括号不会做任何聪明的事情可以解决(使用我的mental regex解析器...)。 – AAT 2009-09-29 12:34:09