在Perl6中将字符串拆分为相等部分的最简单方法

5 perl6

在Perl6中是否有一种优雅的方式将字符串拆分成相等的部分,例如,它是在PowerShell中实现的?在PowerShell中:

'abcdefghijklmnopqrstuvwxyz' -split '(.{8})'
Run Code Online (Sandbox Code Playgroud)

结果:

abcdefgh
ijklmnop
qrstuvwx
yz
Run Code Online (Sandbox Code Playgroud)

splitPerl6的官方文档中有很多愚蠢,没有一个最简单有效.建议?

Bra*_*ert 11

它不会出现在文档中,.split因为它.comb正在寻找.

.say for 'abcdefghijklmnopqrstuvwxyz'.comb: 8
Run Code Online (Sandbox Code Playgroud)
abcdefgh
ijklmnop
qrstuvwx
yz
Run Code Online (Sandbox Code Playgroud)

它还用于使用正则表达式匹配字符串的一部分

.say for 'abcdefg4444hijklmnop4444qrstuvwxyz'.comb: /..\d+../
Run Code Online (Sandbox Code Playgroud)
fg4444hi
op4444qr
Run Code Online (Sandbox Code Playgroud)

您可以将.comb(Int)表单视为匹配该字符数的正则表达式的快捷方式

.say for 'abcdefghijklmnopqrstuvwxyz'.comb: / . ** 1..8 /
Run Code Online (Sandbox Code Playgroud)
abcdefgh
ijklmnop
qrstuvwx
yz
Run Code Online (Sandbox Code Playgroud)

从技术上讲你可以使用.split,但它通常用于删除分裂字符.当你要求它们保留它们时,它会为分裂字符返回一个Match对象.

.say for 'abcdefghijklmnopqrstuvwxyz'.split( /. ** 1..8/, :v, :skip-empty )
Run Code Online (Sandbox Code Playgroud)

(因为正则表达式匹配我们正在寻找的东西,:skip-empty用于删除它们之间的空的不匹配字符串.)

?abcdefgh?
?ijklmnop?
?qrstuvwx?
?yz?
Run Code Online (Sandbox Code Playgroud)

它也可以在正则表达式上使用:global/ :g选项完成,但它也返回Match对象.

.say for 'abcdefghijklmnopqrstuvwxyz' ~~ m :global / . ** 1..8/
Run Code Online (Sandbox Code Playgroud)
?abcdefgh?
?ijklmnop?
?qrstuvwx?
?yz?
Run Code Online (Sandbox Code Playgroud)