我有一个包含元组的字符串,如下所示:
"(-0.345205479452055,1.3543),(-0.26027397260274,1.218),(-0.183561643835616,1.3028)"
我正在尝试将此字符串拆分为仅包含元组的数组:[(-0.345205479452055,1.3543),(-0.26027397260274,1.218),(-0.183561643835616,1.3028)]
我不能像下面那样使用Split
函数,因为该函数还会拆分元组。是否有正则表达式或一些聪明的方法可以照常获取元组?
@Tuples = split /,/,$myString;
答案 0 :(得分:3)
split
可以用于此目的,但需要更详细的表达方式。
my @str = "(-0.345205479452055,1.3543),(-0.26027397260274,1.218),(-0.183561643835616,1.3028)");
my @arr1 = split(/(?<=\)),(?=\()/, $str);
此处的关键是使用零宽度后向断言来检查闭合括号,并使用零宽度前瞻性断言(这里并不是完全必要,但很有用)来检查打开paren。查看perlre文档以获取有关这些信息的更多信息。
或者,如果您想完全避免使用split
,那么也可以使用全局匹配。
my @arr2 = $str =~ /(\([^)]+\))/g;
答案 1 :(得分:1)
如果数据的结构与显示的方式一致,则可以使用后向检查来检查逗号是否在括号后。
/(?<=\)),/
您还可以在后面使用负号,以查看数字是否在逗号前,而不是在逗号前分开,尽管这可能会使您难以理解。
/(?<!\d),/
答案 2 :(得分:0)