在 IO::Spec::Unix 中§
有关 方法 split 的更多信息,请参阅 上下文中的主要文档
method split(IO::Spec::Unix: Cool )
为 $path
创建一个 IO::Path::Parts
,其 volume
属性的值为空字符串。
IO::Spec::Unix.split('C:/foo/bar.txt').raku.say;# OUTPUT: «IO::Path::Parts.new("","C:/foo","bar.txt")»IO::Spec::Unix.split('/foo/').raku.say;# OUTPUT: «IO::Path::Parts.new("","/","foo")»IO::Spec::Unix.split('///').raku.say;# OUTPUT: «IO::Path::Parts.new("","/","/")»IO::Spec::Unix.split('./').raku.say;# OUTPUT: «IO::Path::Parts.new("",".",".")»IO::Spec::Unix.split('.').raku.say;# OUTPUT: «IO::Path::Parts.new("",".",".")»IO::Spec::Unix.split('').raku.say;# OUTPUT: «IO::Path::Parts.new("","","")»
注意:在 Rakudo 2020.06 版本之前,此方法将给定的 $path
拆分为“volume”、“dirname”和“basename”,并以 List
的形式返回结果,其中包含三个 Pair
,按此顺序排列。
在 Cool 中§
有关 例程 split 的更多信息,请参阅 上下文中的主要文档
multi split( Str , Str(Cool) , = Inf, :, :, :, :, :)multi split(Regex , Str(Cool) , = Inf, :, :, :, :, :)multi split(, Str(Cool) , = Inf, :, :, :, :, :)multi method split( Str , = Inf, :, :, :, :, :)multi method split(Regex , = Inf, :, :, :, :, :)multi method split(, = Inf, :, :, :, :, :)
将调用者(或在子形式中,第二个参数)强制转换为 Str
,根据字符串中找到的分隔符将其拆分为多个部分,并以 Seq
的形式返回结果。
如果 $delimiter
是一个字符串,则按字面意思搜索它,而不将其视为正则表达式。您还可以通过将它们指定为一个列表来提供多个分隔符,该列表可以混合 Cool
和 Regex
对象。
say split(';', "a;b;c").raku; # OUTPUT: «("a", "b", "c").Seq»say split(';', "a;b;c", 2).raku; # OUTPUT: «("a", "b;c").Seq»say split(';', "a;b;c,d").raku; # OUTPUT: «("a", "b", "c,d").Seq»say split(/\;/, "a;b;c,d").raku; # OUTPUT: «("a", "b", "c,d").Seq»say split(//, "a;b;c,d").raku; # OUTPUT: «("a", "b", "c", "d").Seq»say split(['a', /b+/, 4], '1a2bb345').raku; # OUTPUT: «("1", "2", "3", "5").Seq»
默认情况下,split
会省略匹配项,并仅返回字符串中未匹配的部分的列表。指定 :k, :v, :kv, :p
其中一个副词会更改此行为。将匹配项视为与不匹配部分交错的列表。
:v
交错该列表的值,这些值将是 Match
对象(如果在拆分中将 Regex
用作匹配器)或 Str
对象(如果将 Cool
用作匹配器)。如果指定了多个分隔符,则将为所有分隔符生成 Match
对象,除非所有分隔符都是 Cool
。
say 'abc'.split(/b/, :v); # OUTPUT: «(a 「b」 c)»say 'abc'.split('b', :v); # OUTPUT: «(a b c)»
:k
交错键,即索引
say 'abc'.split(/b/, :k); # OUTPUT: «(a 0 c)»
:kv
添加索引和匹配项
say 'abc'.split(/b/, :kv); # OUTPUT: «(a 0 「b」 c)»
:p
将它们作为 Pair
添加,对值的类型使用与 :v
相同的类型
say 'abc'.split(/b/, :p); # OUTPUT: «(a 0 => 「b」 c)»say 'abc'.split('b', :p); # OUTPUT: «(a 0 => b c)»
您只能在对 split
的一次调用中使用 :k, :v, :kv, :p
中的一个副词。
请注意,不会从结果列表中删除空块。对于该行为,请使用 :skip-empty
命名参数
say ("f,,b,c,d".split: /","/ ).raku; # OUTPUT: «("f", "", "b", "c", "d").Seq»say ("f,,b,c,d".split: /","/, :skip-empty).raku; # OUTPUT: «("f", "b", "c", "d").Seq»
在 Supply 中§
有关 方法 split 的更多信息,请参阅 上下文中的主要文档
multi method split(Supply: \delimiter)multi method split(Supply: \delimiter, \limit)
此方法创建由对调用者收集的字符串调用 Str.split
方法返回的值的供应。有关 \delimiter
参数以及可用的额外命名参数的详细信息,请参阅 Str.split
。创建的供应可以用 \limit
参数限制,请参阅 .head
。
my = Supply.from-list(<Hello World From Raku!>);my = .split(/ /, 2, :skip-empty);.tap(); # OUTPUT: «HelloWorld»
在 Allomorph 中§
有关 方法 split,请参阅 上下文中的主要文档
method split(Allomorph: |c)
在 IO::Spec::Win32 中§
有关 方法 split,请参阅 上下文中的主要文档
method split(IO::Spec::Win32: Cool )
为 $path
创建 IO::Path::Parts
。
IO::Spec::Win32.split('C:/foo/bar.txt').raku.say;# OUTPUT: «IO::Path::Parts.new("C:","/foo","bar.txt")»IO::Spec::Win32.split('/foo/').raku.say;# OUTPUT: «IO::Path::Parts.new("","/","foo")»IO::Spec::Win32.split('///').raku.say;# OUTPUT: «IO::Path::Parts.new("","/","\\")»IO::Spec::Win32.split('./').raku.say;# OUTPUT: «IO::Path::Parts.new("",".",".")»IO::Spec::Win32.split('.').raku.say;# OUTPUT: «IO::Path::Parts.new("",".",".")»IO::Spec::Win32.split('').raku.say;# OUTPUT: «IO::Path::Parts.new("","","")»
注意:在 Rakudo 2020.06 版本之前,此方法将给定的 $path
拆分为“volume”、“dirname”和“basename”,并以 List
的形式返回结果,其中包含三个 Pair
,按此顺序排列。
在 IO::Spec::Cygwin 中§
有关 方法 split,请参阅 上下文中的主要文档
method split(IO::Spec::Cygwin: Cool )
与 IO::Spec::Win32.split
相同,除了它将最终结果的所有值中的反斜杠替换为斜杠。
在 IO::CatHandle 中§
有关 方法 split,请参阅 上下文中的主要文档
method split(IO::CatHandle: |args --> Seq)
读取句柄并以与 Str.split
相同的方式处理其内容,采用相同的参数。实现可能会在调用此方法时整体吸入所有源句柄的内容。
(my = 'foo'.IO).spurt: 'foo';(my = 'bar'.IO).spurt: 'bar';IO::CatHandle.new(, ).split(/o+/).raku.say;# OUTPUT: «("f", "bar").Seq»
在 IO::Handle 中§
有关 方法 split,请参阅 上下文中的主要文档
method split(IO::Handle: :, |c)
吸入 句柄的内容,并在其上调用 Str.split
,转发任何给定的参数。如果 :$close
命名参数设置为 True
,将在吸入后 关闭 调用者。
当句柄 处于二进制模式 时尝试调用此方法将导致抛出 X::IO::BinaryMode
异常。
my = 'path/to/file'.IO.open;.split: '♥', :close; # Returns file content split on ♥
在 IO::Path 中§
有关 方法 split,请参阅 上下文中的主要文档
method split(IO::Path: |args --> Seq)
打开文件并以与 Str.split
相同的方式处理其内容,采用相同的参数。实现可能会在调用此方法时整体吸入文件。
在 Str 中§
有关 例程 split,请参阅 上下文中的主要文档
multi split( Str , Str , = Inf,:, :, :, :, :)
multi split(Regex , Str , = Inf,:, :, :, :, :)
multi split(List , Str , = Inf,:, :, :, :, :)
multi method split(Str: Str , = Inf,:, :, :, :, :)
multi method split(Str: Regex , = Inf,:, :, :, :, :)
multi method split(Str: List , = Inf,:, :, :, :, :)
根据字符串中找到的分隔符将字符串拆分为多个部分。
如果 DELIMITER
是一个字符串,那么它将被逐字搜索,而不是被视为正则表达式。如果 DELIMITER
是空字符串,那么它实际上会将字符串的所有字符分别返回(外加开头和结尾的空字符串)。如果 PATTERN
是一个正则表达式,那么它将被用于分割字符串。如果 DELIMITERS
是一个列表,那么其所有元素都将被视为分隔字符串的分隔符(字符串或正则表达式)。
可选的 LIMIT
指示字符串应该被分割成多少个片段,如果可能的话。它的默认值为 Inf(或 *,无论你如何看待它),这意味着“尽可能多”。请注意,指定负限制不会产生任何有意义的结果。
可以指定许多可选的命名参数,它们会改变返回的结果。:v
、:k
、:kv
和 :p
命名参数都对找到的分隔符执行特殊操作。
:skip-empty
如果指定,则不要在分隔符之前或之后返回空字符串。
:v
还返回分隔符。如果分隔符是正则表达式,那么这将是关联的 Match
对象。由于这会字符串化为找到的分隔符字符串,因此如果你对该特定匹配的更多信息不感兴趣,你可以始终假设它是分隔符字符串。
:k
还返回分隔符的索引。仅当指定了分隔符列表时才有意义:在所有其他情况下,这将是 0。
:kv
还返回分隔符的索引以及分隔符。
:p
还返回分隔符的索引和分隔符作为 Pair
。
示例
say split(";", "a;b;c").raku; # OUTPUT: «("a", "b", "c").Seq»say split(";", "a;b;c", :v).raku; # OUTPUT: «("a", ";", "b", ";", "c").Seq»say split(";", "a;b;c", 2).raku; # OUTPUT: «("a", "b;c").Seq»say split(";", "a;b;c", 2, :v).raku; # OUTPUT: «("a", ";", "b;c").Seq»say split(";", "a;b;c,d").raku; # OUTPUT: «("a", "b", "c,d").Seq»say split(/\;/, "a;b;c,d").raku; # OUTPUT: «("a", "b", "c,d").Seq»say split(<; ,>, "a;b;c,d").raku; # OUTPUT: «("a", "b", "c", "d").Seq»say split(//, "a;b;c,d").raku; # OUTPUT: «("a", "b", "c", "d").Seq»say split(<; ,>, "a;b;c,d", :k).raku; # OUTPUT: «("a", 0, "b", 0, "c", 1, "d").Seq»say split(<; ,>, "a;b;c,d", :kv).raku; # OUTPUT: «("a", 0, ";", "b", 0, ";", "c", 1, ",", "d").Seq»say "".split("x").raku; # OUTPUT: «("",).Seq»say "".split("x", :skip-empty).raku; # OUTPUT: «().Seq»say "abcde".split("").raku; # OUTPUT: «("", "a", "b", "c", "d", "e", "").Seq»say "abcde".split("",:skip-empty).raku; # OUTPUT: «("a", "b", "c", "d", "e").Seq»