Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Regex - как парсить текст с спецсимволами / 8 сообщений из 8, страница 1 из 1
17.08.2019, 23:02
    #39850728
Strassebahn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Regex - как парсить текст с спецсимволами
Привет

Нужно распарсить строку полученную из массива байт через

Код: c#
1.
System.Text.Encoding.UTF8.GetString(bytes)


нужно разрезать строку на части (Regex.Split)
Разделителем является последовательность двух байт: 8 и 21
точнее символы, соответствующие байтам 8 и 21

я конечно попробовал вставить в Regex эти 2 символа - но Visual Studio ругается,
при такой записи:
Код: c#
1.
 reg_splitter = new Regex(@"", RegexOptions.Compiled)



Не подскажете, как правильно написать Regex?

P S Конечно можно изменить входящий массив байт, но интересует как правильно написать Regex

Спасибо
...
Рейтинг: 0 / 0
17.08.2019, 23:12
    #39850729
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Regex - как парсить текст с спецсимволами
можно попробовать  и 

Но в принципе это кривой подход - говорить о строке UTF8 и употреблять понятие "байт"
...
Рейтинг: 0 / 0
18.08.2019, 19:36
    #39850853
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Regex - как парсить текст с спецсимволами
StrassebahnНе подскажете, как правильно написать Regex?

Регулярные выражения работают только со строками. Они придуманы для работы только со строками.
Почему вы не хотите для такой простой задачи, как сплит, написать простейший алгоритм?
...
Рейтинг: 0 / 0
18.08.2019, 22:09
    #39850868
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Regex - как парсить текст с спецсимволами
Strassebahn,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
        public static IEnumerable<byte[]> Split(byte[] array, byte[] separator)
        {
            if (array == null) throw new ArgumentNullException(nameof(array));
            if (separator == null) throw new ArgumentNullException(nameof(separator));
            if (separator.Length == 0)
                throw new ArgumentException("Value cannot be an empty collection.", nameof(separator));

            var lastIndex = 0;

            for (int i = 0, j = 0; i < array.Length; ++i)
            {
                if (array[i] == separator[j])
                {
                    if (++j < separator.Length) continue;
                    yield return SubArray((i - separator.Length + 1) - lastIndex);
                    lastIndex = i + 1;
                }
                j = 0;
            }

            yield return SubArray(array.Length - lastIndex);

            byte[] SubArray(int length)
            {
                if (length == 0) return Array.Empty<byte>();
                var span = new byte[length];
                Array.Copy(array, lastIndex, span, 0, length);
                return span;
            }
        }



Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Split(separator: [8, 21], array: [])
[[]]
Split(separator: [8, 21], array: [1])
[[1]]
Split(separator: [8, 21], array: [1, 2, 3])
[[1, 2, 3]]
Split(separator: [8, 21], array: [8])
[[8]]
Split(separator: [8, 21], array: [21])
[[21]]
Split(separator: [8, 21], array: [8, 21])
[[], []]
Split(separator: [8, 21], array: [8, 21, 8, 21, 8, 21])
[[], [], [], []]
Split(separator: [8, 21], array: [1, 8, 21])
[[1], []]
Split(separator: [8, 21], array: [8, 21, 2])
[[], [2]]
Split(separator: [8, 21], array: [1, 8, 21, 2, 8, 21, 3])
[[1], [2], [3]]
Split(separator: [8, 21], array: [1, 2, 3, 8, 21, 2, 3, 4, 8, 21, 3, 4, 5])
[[1, 2, 3], [2, 3, 4], [3, 4, 5]]



Лучше конечно ArraySegment использовать, но фиг знает чё у вас там за фреймворк.
...
Рейтинг: 0 / 0
19.08.2019, 10:53
    #39850969
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Regex - как парсить текст с спецсимволами
hVostt,

Зачем столько букв?

Код: c#
1.
stringValue.Split(new char[] { '','' });
...
Рейтинг: 0 / 0
19.08.2019, 11:47
    #39851003
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Regex - как парсить текст с спецсимволами
hVosttStrassebahnНе подскажете, как правильно написать Regex?

Регулярные выражения работают только со строками. Они придуманы для работы только со строками.
Почему вы не хотите для такой простой задачи, как сплит, написать простейший алгоритм?
Люди вон с их помощью еще числа на простоту проверяют :)
...
Рейтинг: 0 / 0
21.08.2019, 08:29
    #39851909
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Regex - как парсить текст с спецсимволами
Cat2hVostt,

Зачем столько букв?

Код: c#
1.
stringValue.Split(new char[] { '','' });



Столько букв для примера.

Не нужно со байтами в строках работать, даже если что-то там получается.
...
Рейтинг: 0 / 0
21.08.2019, 08:30
    #39851910
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Regex - как парсить текст с спецсимволами
ЕвгенийВЛюди вон с их помощью еще числа на простоту проверяют :)

Ну это ж ненормальное пр-ие )
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Regex - как парсить текст с спецсимволами / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]