String.Remove 基于索引位置并与 for 循环混合的子字符串

String.Remove substring based on index position and mixing with a for loop

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void button_Click(object sender, RoutedEventArgs e)
    {
        string s = "String test <123> blablabla1 </123> <123> blablabla2 </123> <123> blablabla3 </123>";
        for (int i = 0; i < s.Length; i++)
        {
            int s1 = s.IndexOf("<123>");
            int s2 = s.IndexOf("</123>");
            int s3 = s2 - s1;
            s = s.Remove(s1, s3);
        }
        textBox.Text = s;
    }

    private void textBox_TextChanged(object sender, TextChangedEventArgs e)
    {

    }
 }

我有以下代码。 字符串 s 包含几个我想要删除的 "blablabla#" 值。 我设法使用简单的 string.remove 数学删除了第一个。 我如何让它在每次出现起始字符串“<123>”时循环?

private void button_Click(object sender, RoutedEventArgs e)
{
    string s = "String test <123> blablabla1 </123> <123> blablabla2 </123> <123> blablabla3 </123>";
    int s1;
    while ((s1 = s.IndexOf("<123>")) >= 0) 
    {
        int s2 = s.IndexOf("</123>");
        int s3 = s2 - s1;
        s = s.Remove(s1, s3);
    }
    textBox.Text = s;
}

您可以一次性全部替换为Regex.Replace:

s = Regex.Replace(s, @"<123>.*?<\/123>", "");

或者也替换多余的空格:

s = Regex.Replace(s, @"\s*<123>.*?<\/123>\s*", "");