首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在汉字和英文字之间插入空格?

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

Stack Overflow用户
提问于 2018-07-11 13:23:12
回答 1查看 1.2K关注 0票数 8

我有一项声明,中文和英文字是相邻的:

代码语言:javascript
复制
我Love Perl 6哈哈

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

代码语言:javascript
复制
我 Love Perl 6 哈哈

我搜索\u4e00-\u9fa5表示汉字:

代码语言:javascript
复制
'哈' ~~ /<[\u4e00..\u9fa5]>/

但结果是:

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

那么,如何匹配一个汉字呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-11 13:56:06

主要问题是\u不是有效的转义。

代码语言:javascript
复制
> "\u4e00"
===SORRY!=== Error while compiling:
Unrecognized backslash sequence: '\u'
------> "\⏏u4e00"

不过,\x是。

代码语言:javascript
复制
> "\x4e00"
一

无论如何,您试图使用的字符类并不包括所有的汉字。

代码语言:javascript
复制
> '㒠' ~~  /<[\x4e00..\x9fa5]>/ 
Nil

您可能想要的是在脚本上匹配。

代码语言:javascript
复制
> '㒠' ~~  /<:Han>/
「㒠」

这样做的好处是,每次在Unicode中添加一组新字符时,不必一直更改您的字符类。

无论如何,您可以执行以下任何一项操作

代码语言:javascript
复制
# 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

代码语言:javascript
复制
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>/,' ';

请注意,<(会导致它之前的所有内容被忽略,而)>对它之后的所有内容都会这样做。(可以单独使用)。

您可能希望对下面的字符使用倒排匹配。

代码语言:javascript
复制
S/<:Han> <( )> [ <!:Han> & <!space> ]/ /

(匹配一个同时不是汉而不是空格的字符。)

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51286606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档