如何在perl中拆分包含连字符的字符串
How to split a string containing a hyphen in perl
我有一个名为 ($date) 的字符串,我试图使用 Perl 将其分成两部分。
$date= (June 25, 2018–July 1, 2018)
根据我的阅读,将此字符串拆分为两个单独日期的正确方法似乎是创建一个新数组,使用带有连字符作为分隔符的 Perl split() 函数,然后分配我的 StartDate/EndDate 变量的数组索引值是这样的...
@dates = split(/-/, $date);
$StartDate = @dates[0];
$EndDate = @dates[1];
print "Effective Date: ($date)\n";
print "($StartDate)";
print "\n";
print "($EndDate)";
然而,这并没有像我预期的那样工作。
请记住,上面的代码只是源代码的一小部分。
Current Output (Incorrect)
Effective Date: (June 25, 2018–July 1, 2018)
(June 25, 2018–July 1, 2018)
()
预期输出(正确)
Effective Date: (June 25, 2018–July 1, 2018)
(June 25, 2018)
(July 1, 2018)
正在寻找有关如何实现我的目标的任何建议。
这里的问题是您试图在 -
(U+002D HYPHEN-MINUS) 上拆分,但您的字符串包含 –
(U+2013 EN DASH)。
您可以通过多种方式在正则表达式中指定此字符:
use utf8;
...
my ($StartDate, $EndDate) = split /–/, $date;
use utf8
告诉 perl 你的源代码是 UTF-8,所以你可以按字面意思使用 Unicode 字符。
my ($StartDate, $EndDate) = split /\x{2013}/, $date;
或者您可以使用十六进制字符代码。
my ($StartDate, $EndDate) = split /\N{EN DASH}/, $date;
或命名字符引用。
如果您不一定要在 EN DASH 上拆分而是任何类似破折号的字符,您可以使用基于 "Dash" 属性 的字符 class:
my ($StartDate, $EndDate) = split /\p{Dash}/, $date;
请注意 @dates[0]
将触发警告(如果 use warnings
已启用,它应该是)因为数组 @foo
的单个元素拼写为 $foo[0]
在 Perl 中。语法 @array[ LIST ]
用于数组切片,即通过索引提取多个元素。
我有一个名为 ($date) 的字符串,我试图使用 Perl 将其分成两部分。
$date= (June 25, 2018–July 1, 2018)
根据我的阅读,将此字符串拆分为两个单独日期的正确方法似乎是创建一个新数组,使用带有连字符作为分隔符的 Perl split() 函数,然后分配我的 StartDate/EndDate 变量的数组索引值是这样的...
@dates = split(/-/, $date);
$StartDate = @dates[0];
$EndDate = @dates[1];
print "Effective Date: ($date)\n";
print "($StartDate)";
print "\n";
print "($EndDate)";
然而,这并没有像我预期的那样工作。
请记住,上面的代码只是源代码的一小部分。
Current Output (Incorrect)
Effective Date: (June 25, 2018–July 1, 2018)
(June 25, 2018–July 1, 2018)
()
预期输出(正确)
Effective Date: (June 25, 2018–July 1, 2018)
(June 25, 2018)
(July 1, 2018)
正在寻找有关如何实现我的目标的任何建议。
这里的问题是您试图在 -
(U+002D HYPHEN-MINUS) 上拆分,但您的字符串包含 –
(U+2013 EN DASH)。
您可以通过多种方式在正则表达式中指定此字符:
use utf8;
...
my ($StartDate, $EndDate) = split /–/, $date;
use utf8
告诉 perl 你的源代码是 UTF-8,所以你可以按字面意思使用 Unicode 字符。
my ($StartDate, $EndDate) = split /\x{2013}/, $date;
或者您可以使用十六进制字符代码。
my ($StartDate, $EndDate) = split /\N{EN DASH}/, $date;
或命名字符引用。
如果您不一定要在 EN DASH 上拆分而是任何类似破折号的字符,您可以使用基于 "Dash" 属性 的字符 class:
my ($StartDate, $EndDate) = split /\p{Dash}/, $date;
请注意 @dates[0]
将触发警告(如果 use warnings
已启用,它应该是)因为数组 @foo
的单个元素拼写为 $foo[0]
在 Perl 中。语法 @array[ LIST ]
用于数组切片,即通过索引提取多个元素。