I'm trying to write a simple method for removing specific BBCodes from an input string.
For example, where I have an input of:
string input = "[b]Hello World![/b]";
I would want to be able to do:
Remove(input, "b");
And get an output of:
"Hello World!"
Regex really isn't my strong suit. I've managed to piece together the following from google:
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);
}
Unfortunately this returns an empty string for my given example.
Can anyone advise me on how I can correct my regex to get the desired output?
Thanks
Use this simple regex:
\[/?{0}\]
Your regex is removing the whole string
Your regex
\[{0}\].*?\[\/{1}\]
is removing the entire[b]...[/b]
string. That's why you are getting an empty string from the replacement.What you need is to remove only the
[b]
and[b]
. In normal regex, this is expressed quite simply with\[/?b\]
, where the slash is made optional by the?
In your parametrized regex, something like
\[/?{0}\]
will work.If you sure that both starting and trailing special symbol must occur and you don't want them to be in a result, you can use positive look back ((?<=(your symbols here))) and positive look ahead ((?=(your symbols here))) for specified characters.
Complete answer will look like this:
The below regex would capture the string
Hello World!
inside the second group.DEMO
So replace all your input string with the second captured group.