Поиск текста в скобках и замена на другой в том же месте - C#

Узнай цену своей работы

Формулировка задачи:

помогите пожалуйста
str_line = str_line.Replace("1", line_b); // я понял
это мне знакомо - я уже переменял вот такое что выдумываю моя цель: существует текст "Masha was on "Titanium"the highway and was"Venadium" sucking on her candy-"Aurum"attacked" спасибо вы помогли написали код вынимания текста скобок - (условный код , и цикличный) я получил вот такое "Titanium" "Venadium" "Aurum" потом после получения текста в скобках, в строке , я изменяю его - делаю совсем другим вот таким пишу "I was dog, I love her" "you know when you take" "Rostov is bathed in a bathtub, and she migrated train" и я хочу вернуть его , на то самое место где взял то есть должно получиться вот так "Masha was on "I was dog, I love her"the highway and was"you know when you take" sucking on her candy-"Rostov is bathed in a bathtub, and she migrated train"attacked"
string str_line="Masha was on "Titanium"the highway and was"Venadium" sucking on her candy-"Aurum"attacked";
int i = 0, flag = 0, ind = 0;
            string str = str_line, temp = "";
            char skobka = '"';
            for (i = 0; i < str.Length; i++)
            {
                if (str[i] == skobka)
                {
                    flag++;
                    if (flag % 2 == 0)
                    {
                        temp = temp + " " + str.Substring(ind, i - ind) + skobka;
                    }
                    else
                    {
                        ind = i;
                    }
                }
            }
Console.WriteLine(temp); // выймет текст -
 
/*
тут код где я изменяю текст temp  этим  line_changed=Console.ReadLine(); 
*/

/*
тут код он вернет temp назад в скобки 
 
insert Replese пробывал , цикл туда пихал , может Split  
для insert
string find = Regex.Replace(str_line, ""(.*?)"", ""1"", RegexOptions.IgnoreCase); 
где я 1 мог бы заменить на текст temp 
string find=find.Replace(""1"",temp); 
но тут не то нужен цикл forech или for для temp 
*/
не вышло реализовать такое химичил не выходит
вот изготовил но столкнулся с проблемой цикла оно выводит по очереди - а мне надо не так Masha was on "Titanium"the highway and was"Venadium" sucking on her candy-"Aurum"attacked- это оригинальная "Titanium" "Venadium" "Aurum" -получил (button1_Click) кнопкай "1234" "4567" "5666" - изменил в richTextBox2.Text и отправил в line_changed вот что получил кнопкай (button2_Click) - в richTextBox3.Text Masha was on "1234"the highway and was"" sucking on her candy-""attacked Masha was on ""the highway and was"4567" sucking on her candy-""attacked Masha was on ""the highway and was"" sucking on her candy-"5666"attacked
        private void button1_Click(object sender, EventArgs e)
        {

            string str_line;
            str_line = richTextBox1.Text;
            int i = 0, flag = 0, ind = 0;
            string str = str_line, temp = "";
            char skobka = '"';
            for (i = 0; i < str.Length; i++)
            {
                if (str[i] == skobka)
                {
                    flag++;
                    if (flag % 2 == 0)
                    {
                        temp = temp + " " + str.Substring(ind, i - ind) + skobka;
                    }
                    else
                    {
                        ind = i;
                    }
                }
            }
            richTextBox2.Text = temp;
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            string line_changed,str_line;
            str_line = richTextBox1.Text;//оригинальный текст 
            
            //изменяем тут текст, и отправляем в line_changed
            line_changed = richTextBox2.Text;
 
            string pattern = """";
            string pattern2 = ""(.*?)"";
            string shakespeare; //замена ALL

            string find = Regex.Replace(str_line, ""(.*?)"", """", RegexOptions.IgnoreCase);
 
            string text = find,text2=line_changed;
            int i,i2;
            MatchCollection matches;
            MatchCollection matches2;
            Regex defaultRegex = new Regex(pattern);
            Regex defaultRegex2 = new Regex(pattern2);
            matches = defaultRegex.Matches(text);
            matches2 = defaultRegex2.Matches(text2);
            for (int ctr = 1; ctr <= matches.Count && ctr <= matches2.Count; ctr++)
            {
                i = matches[ctr - 1].Index;
                i = i + 1;
                i2 = matches2[ctr - 1].Index;
                
                string edit = matches2[ctr - 1].Value;
                edit = edit.Replace(""", "");
 
                //MessageBox.Show(i.ToString()+" "+i2.ToString());
                
                shakespeare = text.Insert(i, edit);
                richTextBox3.Text = shakespeare;            
            }
помогите получить только так Masha was on "1234"the highway and was"4567" sucking on her candy-"5666"attacked
вот изготовил но столкнулся с проблемой цикла оно выводит по очереди - а мне надо не так Masha was on "Titanium"the highway and was"Venadium" sucking on her candy-"Aurum"attacked- это оригинальная "Titanium" "Venadium" "Aurum" -получил (button1_Click) кнопкай "1234" "4567" "5666" - изменил в richTextBox2.Text и отправил в line_changed вот что получил кнопкай (button2_Click) - в richTextBox3.Text Masha was on "1234"the highway and was"" sucking on her candy-""attacked Masha was on ""the highway and was"4567" sucking on her candy-""attacked Masha was on ""the highway and was"" sucking on her candy-"5666"attacked
        private void button1_Click(object sender, EventArgs e)
        {

            string str_line;
            str_line = richTextBox1.Text;
            int i = 0, flag = 0, ind = 0;
            string str = str_line, temp = "";
            char skobka = '"';
            for (i = 0; i < str.Length; i++)
            {
                if (str[i] == skobka)
                {
                    flag++;
                    if (flag % 2 == 0)
                    {
                        temp = temp + " " + str.Substring(ind, i - ind) + skobka;
                    }
                    else
                    {
                        ind = i;
                    }
                }
            }
            richTextBox2.Text = temp;
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            string line_changed,str_line;
            str_line = richTextBox1.Text;//оригинальный текст 
            
            //изменяем тут текст, и отправляем в line_changed
            line_changed = richTextBox2.Text;
 
            string pattern = """";
            string pattern2 = ""(.*?)"";
            string shakespeare; //замена ALL

            string find = Regex.Replace(str_line, ""(.*?)"", """", RegexOptions.IgnoreCase);
 
            string text = find,text2=line_changed;
            int i,i2;
            MatchCollection matches;
            MatchCollection matches2;
            Regex defaultRegex = new Regex(pattern);
            Regex defaultRegex2 = new Regex(pattern2);
            matches = defaultRegex.Matches(text);
            matches2 = defaultRegex2.Matches(text2);
            for (int ctr = 1; ctr <= matches.Count && ctr <= matches2.Count; ctr++)
            {
                i = matches[ctr - 1].Index;
                i = i + 1;
                i2 = matches2[ctr - 1].Index;
                
                string edit = matches2[ctr - 1].Value;
                edit = edit.Replace(""", "");
 
                //MessageBox.Show(i.ToString()+" "+i2.ToString());
                
                shakespeare = text.Insert(i, edit);
                richTextBox3.Text = shakespeare;            
            }
помогите получить только так Masha was on "1234"the highway and was"4567" sucking on her candy-"5666"attacked

Решение задачи: «Поиск текста в скобках и замена на другой в том же месте»

textual
Листинг программы
this.dataGridView1.Rows.Add("five", "six", "seven", "eight");
            string memo = "";
            //string dataGridView1 = "";
            if (dataGridView1.Rows.Count == 0)
            {
                MessageBox.Show("Пустая база данных для поиска синонимов", "Облом");
            }
            string pattern = "\"(.*?)\"";
            string sinonim = "h";
            //sinonim = richTextBox2.Text;
            memo = richTextBox1.Text.ToString();
            richTextBox1.Text = richTextBox1.Text;
            foreach (DataGridViewRow str in dataGridView1.Rows)
            {
                if (str.Cells[1].Value != null)
                    sinonim = str.Cells[1].Value.ToString();
                if (str.Cells[2].Value != null)
                    pattern = str.Cells[2].Value.ToString();
                if (sinonim != "" && pattern != "")
                {
 
                    richTextBox1.Text = Regex.Replace(richTextBox1.Text.ToString(), pattern, sinonim,
                                                      RegexOptions.IgnoreCase);
                    int StartIndex = 0;
                    int count = 0;
                    Color nowColor = richTextBox1.SelectionColor;
                    while (StartIndex < richTextBox1.Text.LastIndexOf(sinonim))
                    {
                        richTextBox1.Find(sinonim, StartIndex, richTextBox1.TextLength, RichTextBoxFinds.None);
                        richTextBox1.SelectionColor = Color.DarkCyan;
                        StartIndex = richTextBox1.Text.IndexOf(sinonim, StartIndex) + 1;
                        count++;
                    }
                    richTextBox1.SelectionColor = nowColor;
                    richTextBox3.Text = "Замена произведена .  Найдено " + count + " слов.";
 
 
 
 
                }
                else
                {
                    MessageBox.Show("Проверте введенные данные в таблице замены");
                }
 
            }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.5 из 5
Похожие ответы