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

时间:2018-04-06 16:14:09

标签: perl6

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

'abcdefghijklmnopqrstuvwxyz' -split '(.{8})'

结果:

abcdefgh
ijklmnop
qrstuvwx
yz

在Perl6的官方文档中有很多愚蠢的split,没有一个最简单有效。建议?

1 个答案:

答案 0 :(得分:11)

它不在.split的文档中,因为它正在寻找.comb

.say for 'abcdefghijklmnopqrstuvwxyz'.comb: 8
abcdefgh
ijklmnop
qrstuvwx
yz

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

.say for 'abcdefg4444hijklmnop4444qrstuvwxyz'.comb: /..\d+../
fg4444hi
op4444qr

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

.say for 'abcdefghijklmnopqrstuvwxyz'.comb: / . ** 1..8 /
abcdefgh
ijklmnop
qrstuvwx
yz

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

.say for 'abcdefghijklmnopqrstuvwxyz'.split( /. ** 1..8/, :v, :skip-empty )

(由于正则表达式匹配我们要查找的内容,:skip-empty用于删除“它们之间”的空的不匹配字符串。)

「abcdefgh」
「ijklmnop」
「qrstuvwx」
「yz」

也可以使用正则表达式上的:global / :g选项来完成,但它也会返回Match个对象。

.say for 'abcdefghijklmnopqrstuvwxyz' ~~ m :global / . ** 1..8/
「abcdefgh」
「ijklmnop」
「qrstuvwx」
「yz」