【问题标题】:Split functions拆分功能
【发布时间】:2013-02-08 02:57:09
【问题描述】:

我想得到拆分字符。我尝试了以下编码,但我只能获取拆分后的文本。但是,如果拆分字符相同,则应将其作为单个字符返回 例如,如果字符串是“asa,agas,asa”,则只应返回 , 。 所以在下面的情况下,我应该得到“| : ;” (加空格)

use strict;
use warnings;

my $str = "Welcome|a:g;v";
my @value = split /[,;:.%|]/, $str;

foreach my $final (@value) {
    print $final, "\n";
}

【问题讨论】:

    标签: perl


    【解决方案1】:

    split 在给定 分隔 元素时将字符串拆分为元素,因此 split 不是您想要的。相反,使用:

    my @punctuations = $str =~ /([,;:.%|])/g;
    

    【讨论】:

    • @siva2012,这将获得所有分隔符的列表,包括重复。为了仅从中获取唯一分隔符,请查看有关查找唯一数组元素的问题:stackoverflow.com/questions/439647/…
    【解决方案2】:

    所以你想得到分裂的反面

    尝试:

    my @value=split /[^,;:.%|]+/,$str;
    

    它会在任何您设置的分隔符上分割。

    commnets后更正:

    my @value=split /[^,;:.%|]+/,$str;
    shift @value;
    

    【讨论】:

    • 从技术上讲这是错误的,因为数组中的第一项会有一个空项?
    • 我相信如果两个标点符号彼此相邻,它也会给出错误的答案。 (但 OP 并不清楚他想要什么。)
    • @Myforwik 正确,但它可能始终是第一个元素。我将编辑答案以反映这一点
    • @ilomambo:还是错了,因为如果字符串开头是标点符号,就不会有初始的空字段。
    • @Borodin 因此出现了“大概”这个词。无论如何,OP 想要独特的结果,所以我在 6 小时前以不同的答案发布了另一个解决方案。
    【解决方案3】:

    这很好用,并且给出了独特的答案

    @value = ();
    foreach(split('',",;:.%|")) { push @value,$_ if $str=~/$_/; }
    

    【讨论】:

    • my @value = grep $str =~ /$_/, split //, ',;:.%|';
    • 对不起 - 应该是my @value = grep $str =~ /\Q$_/, split //, ',;:.%|'
    【解决方案4】:

    要只提取一次所有分隔符,您需要更精细的东西

    my @punctuations = keys %{{ map { $_ => 1 } $str =~ /[,;:.%|]/g }};
    

    【讨论】:

    • @ilomambo:是的,确实如此。是什么让你不这样说?
    • 我在 perl 中运行它,它只给出了 4 个分隔符中的 3 个
    • 对不起,我是在perl中运行的,是另一个错误 ::: \@value = grep $str =~ /$_/, split //, ',;:.% |' ::: 它给了“。”在 \@value 中,它不在 $str :::: 中,无论如何,我认为 OP 现在有几种选择来解决他/她的问题,这也是一个很好的提示,在 perl 中有 10 种方法可以做到这一点,很好的学习。
    • @ilomambo:是的,你是对的 - /./ 需要转义。我将添加另一条评论。
    【解决方案5】:

    听起来您将我们其他人称为“分隔符”的“拆分字符”称为“分隔符”——如果是这样,POSIX 字符类[:punct:] 可能会被证明是有价值的。

    OTOH,如果您有一个已定义的分隔符列表,并且您只想列出字符串中存在的分隔符,那么使用m// 比使用split 更有效。

    【讨论】:

      猜你喜欢
      • 2016-02-26
      • 2012-07-19
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多