我是 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的输出
因此,当我阅读文档时,我假设我的变量将被视为文字字符串,而实际上并非如此,因此前导空格没有被剥离。
我认为你的代码运行良好
my $text = "botolo";
my $separator = "o";
print +(split($separator, $text))[0];
#uglyness with + necessary because Perl
虽然,以多写一行为代价,我宁愿将最后一行写为:
my @parts = split($separator, $text);
print $parts[0];
当你在字面空间上分裂时
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。 有人可以帮助一个有效的解决方案。
示例: 谢谢你。
我希望能够根据子字符串分隔符拆分字符串,在分隔符子字符串的第一个字符之前开始拆分。现在: 将给我,但我希望得到