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
.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)