代码之家  ›  专栏  ›  技术社区  ›  chenyf

如何在汉字和英文字符之间插入空格?

  •  7
  • chenyf  · 技术社区  · 6 年前

    我有一个陈述,其中中文和英文是相邻的:

    我Love Perl 6哈哈
    

    我想在中文和英文之间插入一个空格:

    我 Love Perl 6 哈哈
    

    我搜索那个 \u4e00-\u9fa5 代表汉字:

    '哈' ~~ /<[\u4e00..\u9fa5]>/
    

    但这会导致:

    Potential difficulties:
    Repeated character (0) unexpectedly found in character class
    at line 2
    ------> '哈' ~~ /<[\u4e00..\⏏u9fa5]>/
    

    那么如何匹配汉字呢?

    1 回复  |  直到 6 年前
        1
  •  13
  •   Brad Gilbert    6 年前

    \u

    > "\u4e00"
    ===SORRY!=== Error while compiling:
    Unrecognized backslash sequence: '\u'
    ------> "\⏏u4e00"
    

    \x

    > "\x4e00"
    一
    

    > '㒠' ~~  /<[\x4e00..\x9fa5]>/ 
    Nil
    

    > '㒠' ~~  /<:Han>/
    「㒠」
    


    # store in $0 and $1
    say S/(<:Han>)(<:Latin>)/$0 $1/ given '我Love Perl 6哈哈'
    say S{(<:Han>)(<:Latin>)} = "$0 $1" given '我Love Perl 6哈哈'
    # same with subst
    say '我Love Perl 6哈哈'.subst: /(<:Han>)(<:Latin>)/, {"$0 $1"}
    
    # only match between the two
    say S/<:Han> <( )> <:Latin>/ / given '我Love Perl 6哈哈'
    say S{<:Han> <( )> <:Latin>} = ' ' given '我Love Perl 6哈哈'
    

    s/// .=subst

    my $v = '我Love Perl 6哈哈';
    
    $v ~~ s/(<:Han>)(<:Latin>)/$0 $1/;
    $v ~~ s{(<:Han>)(<:Latin>)} = "$0 $1";
    $v ~~ s/<:Han> <()> <:Latin>/ /;
    
    $v .= subst: /(<:Han>)(<:Latin>)/, {"$0 $1"};
    $v .= subst: /<:Han> <()> <:Latin>/,' ';
    

    <( )>

    S/<:Han> <( )> [ <!:Han> & <!space> ]/ /
    

    推荐文章