c# Regex Split Binary String - PullRequest
       5

c# Regex Split Binary String

2 голосов
/ 21 января 2020

Я пытаюсь разбить строку двоичных цифр заданным c способом

Допустим, это моя строка 100011001110010101110

Я хочу разбить строку на каждом 0 до 1

Таким образом, строка выше после split становится

1000 1100 11100 10 10 1110

Я использовал шаблон Regex /(1+0+)/g, которая правильно разбивает строку, но пропускает некоторые группы. Вот код c#

Regex.Split(stringToSplit, @"(1+0+)");

Пожалуйста, что я не так делаю.

РЕДАКТИРОВАТЬ: Я не упомянул, что я уверен, что 1 будет всегда предшествовать a 0

Заранее спасибо.

Ответы [ 3 ]

6 голосов
/ 21 января 2020

Вы можете попробовать посмотреть впереди и позади , т. Е. Пролить текст нулевой длины с 0 за разделением и 1 впереди это

Код:

  string source = "100011001110010101110";

  var result = Regex.Split(source, "(?<=0)(?=1)");

  // Let's have a look
  Console.Write(string.Join(Environment.NewLine, result));

Результат:

1000
1100
11100
10
10
1110

Редактировать: Шаблон (?<=0)(?=1) Объяснение:

(?<=0) - 0 should be behind the split
       - empty; split on epmty (zero-length) text
(?=1)  - 1 should be ahead of the split

Итак, мы имеем

1000 110011
   ^^^
   |||- 1 should be ahead of split
   ||--   split here
   |--- 0 should be behind the split
1 голос
/ 21 января 2020

Проблема в том, что ваш шаблон регулярных выражений возвращает несколько соответствий, как вы можете видеть Здесь .

Вы можете получить значения, используя .Matches().

Regex.Matches("100011001110010101110", "(1+0+)").Cast<Match>().Select(x => x.Value);
0 голосов
/ 21 января 2020

Код:

var input = "100011001110010101110";
var results = Regex.Split(input, @"(1+0+)")
                        .Where(n => !string.IsNullOrEmpty(n))
                        .ToList();
Console.WriteLine(string.Join("\n", results));

Результат:

1000
1100
11100
10
10
1110
Press any key to continue . . .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...