Составить регулярное выражение - C# (202380)

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

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

Здравствуйте, помогите пожалуйста написать регулярку чтобы она делала следующее: есть массив строк, если в строке встречается сочетание символов "

> (

" то создать новую строку в которой все что идет после ">" надо удалить, если такого сочетания не встречается, то оставить, и загнать все это в массив. типа есть:
> <id

> (

PO00-123004) GHL00004 > <smiles

> (

EN300-12313204) OC(=O)C=1C=CC=2C(=O)C=3C=CC=CC3C(=O)C2C1Cl > <MDLNUMBER

> (

HI0-00004) MFCD00429391 > <name

> (

J00-789704) 1-Chloro-(9,10-dioxo-9,10-dihydro-anthracene)-2-carboxylic acid > <CAS

> (

POIY00-456) 82-23-5 > <MP

> (

EK00-95448935) 199 - 201(оС)
надо получить:
> <id> GHL00004 > <smiles> OC(=O)C=1C=CC=2C(=O)C=3C=CC=CC3C(=O)C2C1Cl > <MDLNUMBER> MFCD00429391 > <name> 1-Chloro-(9,10-dioxo-9,10-dihydro-anthracene)-2-carboxylic acid > <CAS> 82-23-5 > <MP> 199 - 201(оС)
пробую как то так, но не очень получается...
string[] separator = { "\r\n" };
source = System.IO.File.ReadAllText(openFileDialog2.FileName, Encoding.Default).Split(separator, StringSplitOptions.None);
                
        void sdf()
        {
            string[] sdffline = new string[0];            
            Array.Resize(ref sdffline, source.Length);
            int f = 0;
            foreach (string x in source) // Выводит только уникальные записи
            {
                int index=0;// = Regex.Match(x, @"> (").Index;
                index = x.IndexOf(@"> (");
                if (index != -1)
                {
                    sdffline[f] = (x.Substring(0, index + 1));
                }
                else
                {
                    sdffline[f] = x;
                }
                
                f++;
            }
            richTextBox2.Lines = sdffline.ToArray<string>();
        }
с регуляркой вроде вроде разобрался... вот только теперь при чтении файла размером 140 метров получаю исключение:
Exception of type 'System.OutOfMemoryException' was thrown

Решение задачи: «Составить регулярное выражение»

textual
Листинг программы
        void sdf()
        {
            richTextBox2.Clear();
            string[] sdffline = new string[0];            
            Array.Resize(ref sdffline, source.Length);
            int f = 0;
            foreach (string x in source) // Выводит только уникальные записи
            {
                int index=0;// = Regex.Match(x, @"> (").Index;
                index = x.IndexOf(@"> (");
                if (index != -1)
                {
                    sdffline[f] = (x.Substring(0, index + 1));
                }
                else
                {
                    sdffline[f] = x;
                }
                
                f++;
            }
 
            if (source.Length < 500000) 
            { 
                richTextBox2.Lines = sdffline.ToArray<string>();
            }
            
            System.IO.File.WriteAllLines(openFileDialog2.FileName + "111.sdf",sdffline,Encoding.Default);
            label3.Text = source.Length.ToString();
            label4.Text = sdffline.Length.ToString();
 
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
            openFileDialog2.Filter = "SDF (*.sdf)|*.sdf|Text files (*.txt; *.tab; *.tbl)|*.txt; *.tab; *.tbl; *.ods|All files (*.*)|*.*";
            if ((openFileDialog2.ShowDialog() == DialogResult.OK))
            {
                string[] separator = { "\r\n" };                
                source = System.IO.File.ReadAllText(openFileDialog2.FileName, Encoding.Default).Split(separator, StringSplitOptions.None);
                //richTextBox1.Lines = source;
                sdf();
            }
        }

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


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

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

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