当前位置: 首页 > 知识库问答 >
问题:

Perl使用基于字符串的分隔符拆分字符串

范建华
2023-03-14

我是 Perl 的新手,但根据我阅读的文档,看起来 Perl 中的 split 函数要求正则表达式模式而不是字符串分隔符作为第一个参数,但我发现使用 print (split(' ', $string))[0] 之类的东西仍然可以正确拆分字符串。

基于此,我尝试使用可变分隔符(例如。< code>print (split($var,$ string))[0] where < code > $ var = ' ' )并发现它不起作用。我做错了什么?

谢谢!

编辑:很抱歉这个可怕的问题。我对一个带有前导空格的字符串运行它,发现拆分函数不喜欢前导空格。例如:

my$var='';print(split($var,'abcdddd'))[0]给出空白输出。$var是否在拆分函数中被解释为/$var/

< code>print (split(',' ABC ddddd ')[0],给出< code>abc的输出

因此,当我阅读文档时,我假设我的变量将被视为文字字符串,而实际上并非如此,因此前导空格没有被剥离。

共有2个答案

鞠自明
2023-03-14

我认为你的代码运行良好

my $text = "botolo";
my $separator = "o";
print +(split($separator, $text))[0];  
#uglyness with + necessary because Perl

虽然,以多写一行为代价,我宁愿将最后一行写为:

my @parts = split($separator, $text);
print $parts[0];
贺高杰
2023-03-14

当你在字面空间上分裂时

split ' '

您将调用文档中描述的特殊情况。使用变量时

my $var = ' ';
split $var;

这与将该变量放入正则表达式中是一样的:

split /$var/;

这将在单个空白处拆分,而不是同一件事。例如,如果您有以下代码:

my $string = "foo bar   baz";
my @literal = split ' ', $string;
my @space = split / /, $string;

然后,@literal将包含“foo”、“bar”、“baz”,而 将包含 “foo”、“bar”、“”、““”、”baz“

文档是这样描述它的:

作为另一种特殊情况,当省略 PATTERN 或由单个空格字符(例如 ' ' 或 “\x20” ,但不是例如 / / )组成的文本字符串时,split 会模拟命令行工具 awk 的默认行为。在这种情况下,EXPR 中的任何前导空格都会在拆分发生之前被删除,而 PATTERN 将被视为 /\s / ;特别是,这意味着任何连续的空格(不仅仅是单个空格字符)都用作分隔符。然而,这种特殊处理可以通过指定模式 / / 而不是字符串 “” 来避免,从而只允许单个空格字符作为分隔符。在早期的Perls中,这种特殊情况仅限于使用普通的“”作为模式参数进行拆分,在Perl 5.18.0和后来的Perl中,这种特殊情况是由任何计算为简单字符串“”的表达式触发的。

请注意,如果您正在寻找一种通过使用变量来动态模拟< code >“”拆分的方法,您可以使用< code>/\s /来代替。这是不完全相同的,因为它不会删除前导空白,但在其他方面应该可以正常工作。

 类似资料:
  • 我正在尝试拆分字段(在某个分隔符“;”)并将结果插入表中。最大值为5个子字符串,由“;”分隔。最多只有5个水果。如果只有水果列,如何拆分字符串以获得单独的水果。如果果数少于5,其余列将返回NA。 我首先创建了新列并将其全部设置为null。我尝试了以下代码,但它不起作用,如果水果比列少,其余列将只取最后一个水果的值而不是null。 是否还有其他信息可用于拆分字符串?

  • 如何将过滤器列表拆分为单个过滤器元件?split2String在线程“main”java.util.regex中导致:异常。PatternSyntaxException:索引10或(|和)附近的未闭合组(

  • 问题内容: 我有一个值为的字符串。我想将字符串分成两个字符串,值为的字符串和的值为字符串。 正确的功能/语法是什么? 我已经看过了,但是找不到将数据返回到两个单独的字符串中的实际语法。 问题答案: 该功能适用于:

  • 我有一个输入字符串,其中包含由分隔符(| |)分隔的4个ID。我使用的代码如下: 但有些情况下并非所有ID都存在,如: 在上面的场景中,拆分不会分为4个部分,并且无法判断拆分数组中缺少哪个id。 有人可以帮助一个有效的解决方案。

  • 我希望能够根据子字符串分隔符拆分字符串,在分隔符子字符串的第一个字符之前开始拆分。现在: 将给我,但我希望得到