从字符串中删除已定义的部分
本文关键字:定义 字符串 删除 | 更新日期: 2023-09-27 18:04:46
假设我有这个字符串:
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();
}
试试这个Regex:
public static string Remove(string text)
{
return Regex.Replace(text, "<.*?>","");
}
看看这个循环:
while (text[i] != '>')
{
result[i] += text[i];
}
它将继续执行,直到条件不满足为止。假设你没有改变text[i]
,它永远不会停止。。。
此外,您在char[]
上调用ToString
,它不会执行您想要的操作,即使执行了,也会留下字符。
如果你想这样循环,我会使用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();
}
或者,使用正则表达式。让它处理嵌套的尖括号相对来说比较棘手,但如果你不需要,它真的很简单:
// 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"
——注意双空格。
使用
string text = "Hi my name is <crazy> Bob";
text = System.Text.RegularExpressions.Regex.Replace(text, "<.*?>",string.Empty);
我推荐使用regex。
public static string DoIt(string content, string from, string to)
{
string regex = $"(''{from})(.*)(''{to})";
return Regex.Replace(content, regex, "");
}