regex - 将二进制数分成零组和一组

标签 regex perl

我有一个二进制数,例如 10000111000011,并希望将其分成连续的 1 和 0 组,1 0000 111 0000 11

我认为这是使用环视的绝佳机会:我的正则表达式对数字使用正向后查找(它捕获该数字以供以后反向引用),然后对同一数字使用负向前查找(使用反向引用) ,所以只要一个数字后面跟着一个不同的数字,我就应该进行分割。

use strict;
use warnings;
use feature 'say';

my $bin_string = '10000111000011';
my @groups = split /(?<=(\d))(?!\g1)/, $bin_string;

say "@groups";

但是,这会导致

1 1 0000 0 111 1 0000 0 11 1

不知何故,捕获的数字会在每次分割时插入。出了什么问题?

最佳答案

这是对您的代码的一个小修复:

my @groups = split /(?<=0(?!0)|1(?!1))/, $bin_string;

您遇到的问题是,当使用split时,捕获的文本也会输出到结果数组中。因此,解决方案是摆脱捕获组。

由于您的输入中只有 01,因此通过交替和前瞻来确保数字发生变化非常容易。

参见demo

关于regex - 将二进制数分成零组和一组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31781987/

相关文章:

regex - [a-zA-Z] 的正则表达式

javascript - 正则表达式表示仅重复我提供的字符的单词?

multithreading - 在 Mojolicious 中同时获取数据

perl - 用 `&nbsp;` 替换任何标签内容中的所有空格

perl text::csv - 过滤 csv 文档中的特定列并丢弃其他列

java - 如何在 Java 中将字符串子串到第二个点 (.)?

用于快速路由器 url 的正则表达式以匹配以/public/开头的路径

perl 系统调用无法识别路径

perl - 两次评估只读变量时的不同结果

c++ - 除非整行相同,否则正则表达式不匹配