用于从字符串中删除特定BBCode的正则表达式

时间:2014-06-26 10:47:27

标签: c# regex bbcode

我试图编写一种从输入字符串中删除特定BBCode的简单方法。

例如,我有一个输入:

string input = "[b]Hello World![/b]";

我希望能够做到:

Remove(input, "b");

获得输出:

"Hello World!"

正则表达式真的不是我的强项。我设法将以下内容从谷歌拼凑起来:

public static string Remove(string input, string code)
{
    string pattern = string.Format(@"\[{0}\].*?\[\/{1}\]", code, code);

    return Regex.Replace(input, pattern, string.Empty, RegexOptions.IgnoreCase);
}

不幸的是,这会为我给出的示例返回一个空字符串。

有人可以告诉我如何纠正我的正则表达式以获得所需的输出吗?

由于

3 个答案:

答案 0 :(得分:2)

使用这个简单的正则表达式:\[/?{0}\]

您的正则表达式正在删除整个字符串

  • 您的正则表达式\[{0}\].*?\[\/{1}\]正在移除整个[b]...[/b]字符串。这就是为什么你从替换中得到一个空字符串。

  • 您需要的是仅删除[b][b]。在正常的正则表达式中,使用\[/?b\]非常简单地表达了这一点,其中斜杠是?

  • 的可选项
  • 在参数化的正则表达式中,类似\[/?{0}\]的内容将起作用。

答案 1 :(得分:0)

以下正则表达式将捕获第二组内的字符串Hello World!

^(.*?)((?<=])[^[]*)(.*)$

DEMO

所以用第二个捕获的组替换所有输入字符串。

答案 2 :(得分:0)

如果您确定必须同时出现起始和尾随特殊符号并且您不希望它们出现在结果中,您可以使用正向回顾((?&lt; =(此处为您的符号)))和正面外观提前((?=(你的符号在这里)))指定的字符。

完整的答案将如下所示:

(?<=(\[{0}\])).*(?=(\[\/{1}\]))