使用 Perl 的 split 函数,但保留特定的分隔符。

4

我有一个字符串需要按照特定字符进行分割。但是,只有当该字符两侧都是数字时,才需要在该字符处进行分割。该字符在字符串的其他位置也存在,但至少一侧是字母。我尝试使用以下方法(以"x"作为所需字符):

my @array = split /\dx\d/, $string;

然而,这个函数会删除"x"和两侧的数字。如果可能的话,我想保留数字。有什么想法吗?

2个回答

13

使用零宽断言:

my @array = split /(?<=\d)x(?=\d)/, $string;

这将匹配前后都是数字的 x,但不会消耗数字本身。


Marcelo,这个是否匹配字符串的开头/结尾的x? - DVK
@DVK:不会,因为x的实例不会在数字之前。您可以通过负断言来实现这一点(以匹配字符串开头和结尾的x):/(?<!\D)x(?!\D)/,但它当然无法匹配所述问题。 - Marcelo Cantos
我不确定...没有原帖明确说明,我倾向于认为"^x3"是一个有效的分隔符...但你可能是对的。 - DVK
@DVK:OP 的措辞是“被数字包围”。我想你可以说在 "x123" 中,x 被数字包围,但这有点牵强。 - Marcelo Cantos

1
你可以先用一个独特的字符替换你想要分割的字符,然后在这个独特的字符上进行分割,就像这样:
$string =~ s/(\d)x(\d)/\1foobar\2/g;
my @array = split /foobar/, $string;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接