Как я могу отделить массив строк через REGEX? - PullRequest
0 голосов
/ 10 августа 2010

Я разделил "A320-789-890" в соответствии с "-", и я получил список ниже:

"A101C", "B7CL", "E7CL", "D7CL"

Все в порядке.Мой результат, приведенный выше, является результатом моего решения.Но у меня есть 2 вопроса:

  1. как я могу сделать это с регулярным выражением?
  2. , если я могу сделать это с регулярным выражением, могу ли я использовать регулярное выражение с linq?
  3. , который более эффективен в соответствии с производительностью, как мой метод ниже, или регулярное выражение?

    namespace engRegex1 {открытый частичный класс Form1: Form {public Form1 () {InitializeComponent ();}

        private void Form1_Load(object sender, EventArgs e)
        {
            Engineering eng = new Engineering();
            string[] engSplitList = new string[eng.engList.Count()];
            List<string> firstitem = new List<string>();
            foreach (string item in eng.engList)
            {
                engSplitList = item.Split('-');
                firstitem.Add(engSplitList[0]);
            }
            foreach (string item in firstitem)
                listBox1.Items.Add(item);
        }
    }
    public class Engineering
    {
        public List<string> engList = new List<string>() { 
            "A101C-234-456", "B7CL-567-789", "E7CL-567-789", "D7CL-567-789" };
    }
    

    }

Ответы [ 4 ]

2 голосов
/ 10 августа 2010
  1. Вы можете использовать статический метод RegEx.Split, который принимает две строки:

    string[] parts = RegEx.Split("A320-789-890", "-");

  2. Вы можете использовать Linq с этим. Вы также можете использовать Linq с результатами из string.Split - эти две вещи на самом деле не связаны. Что вы хотите сделать с Linq?

  3. Вам нужно будет провести тестирование в соответствии с вашей ситуацией. Я предлагаю вам сделать микро-тест с репрезентативными данными.

Я бы добавил, что string.Split прост и оптимизирован. Если это работает, вы должны просто использовать его, а не искать другие решения. Исправьте это , если , это становится узким местом и проблемой - есть вероятность, что если вы профилируете свое приложение, вы обнаружите, что проблемы в другом месте.

1 голос
/ 10 августа 2010

Вы также можете просто использовать Linq и split, чтобы делать то, что вы хотите ...

  var result = from s in engList
               let first =  s.Split('-').First()
               select first;
1 голос
/ 10 августа 2010

Пока вам нужно извлечь только первую часть, я предлагаю IndexOf + Подстрока :

foreach (string item in eng.engList)
{
    listBox1.Items.Add(item.Subsstring(0, item.IndexOf('-'));
}

Это будет самая быстрая (инаверное самый простой) способ.

// РЕДАКТИРОВАТЬс LINQ это будет примерно так:

listBox1.Items.AddRange(from item in eng.engList select item.Subsstring(0, item.IndexOf('-')));

с RegEX

foreach (string item in eng.engList)
{
    listBox1.Items.Add(RegEx.Match(item, "[^-]*").ToString());
}

с RegEX и LINQ:

listBox1.Items.AddRange(from item in eng.engList select RegEx.Match(item, "[^-]*").ToString())
0 голосов
/ 10 августа 2010

Это обычный способ сделать это, вместо этого использовать AddRange, а также привязать список к списку, чтобы получить лучшую производительность и более компактный код.

Исходя из вашего уровня знаний, регулярное выражениеэто плохое решение для вас, регулярное выражение трудно и легко сделать неправильно, возьмите книгу о регулярных выражениях и затем используйте.

Помните, что компактная запись - это компромисс для читабельности

С уважением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...