让我说我有这个字符串:
string text = "Hi my name is <crazy> Bob";
我想带走括号内的所有内容,结果如下:
"Hi my name is Bob".
所以我已经尝试了这个,我知道我一直认为while循环错了,但我无法解决这个问题。
public static string Remove(string text)
{
char[] result = new char[text.Length];
for (int i = 0; i < text.Length; i++ )
{
if (text[i] == '<')
{
while (text[i] != '>')
{
result[i] += text[i];
}
}
else
{
result[i] += text[i];
}
}
return result.ToString();
}
答案 0 :(得分:11)
试试这个正则表达式:
public static string Remove(string text)
{
return Regex.Replace(text, "<.*?>","");
}
答案 1 :(得分:6)
看看这个循环:
while (text[i] != '>')
{
result[i] += text[i];
}
这将继续执行,直到条件不满足为止。鉴于你没有改变text[i]
,它永远不会停止......
此外,您正在ToString
上致电char[]
,而StringBuilder
没有做您想做的事情,即使这样做,您也会遗留下来字符。
如果你想像这样循环,我会使用public static string RemoveAngleBracketedContent(string text)
{
var builder = new StringBuilder();
int depth = 0;
foreach (var character in text)
{
if (character == '<')
{
depth++;
}
else if (character == '>' && depth > 0)
{
depth--;
}
else if (depth == 0)
{
builder.Append(character);
}
}
return builder.ToString();
}
,并且只是跟踪你是否&#34;在&#34;角支架与否:
// You can reuse this every time
private static Regex AngleBracketPattern = new Regex("<[^>]*>");
...
text = AngleBracketPattern.Replace(text, "");
或者,使用正则表达式。让它来应对嵌套的尖括号会相对棘手,但如果你不需要它,它就非常简单:
"Hi my name is <crazy> Bob"
最后一个问题 - 在从"Hi my name is Bob"
移除角度括号内的文字后,你实际得到{{1}} - 注意双倍空格。
答案 2 :(得分:2)
使用
string text = "Hi my name is <crazy> Bob";
text = System.Text.RegularExpressions.Regex.Replace(text, "<.*?>",string.Empty);
答案 3 :(得分:0)
我建议使用正则表达式。
public static string DoIt(string content, string from, string to)
{
string regex = $"(\\{from})(.*)(\\{to})";
return Regex.Replace(content, regex, "");
}