Regex Perl-使用正则表达式拆分包含元组的字符串
我有一个包含元组的字符串,如下所示:Regex Perl-使用正则表达式拆分包含元组的字符串,regex,perl,split,Regex,Perl,Split,我有一个包含元组的字符串,如下所示: “(-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函数,因为该函数也会拆分元组。有没有一个正则表达式或
“(-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代码>如果元组内没有括号,元组外也没有括号,则可以简单地使用以下正则表达式:
my @array = $str =~ /(\(.*?\))/sg;
假设每个元组始终有一个起始括号和一个匹配的结束括号
这里
*?
是一个非语法量词,请参阅以了解更多信息
- 标志
s
是一个正则表达式修饰符,它允许
也匹配换行符(如果字符串包含换行符),有关详细信息,请参阅
- 标志
g
表示全局匹配,并允许匹配运算符在字符串内尽可能多次匹配。
在列表上下文中,g
返回匹配分组的列表,如果没有分组,则返回整个regexp的匹配列表,有关详细信息,请参阅
如果您的数据结构与显示的一致,您可以使用lookback检查并查看逗号是否位于括号后
/(?<=\)),/
/(?可用于此,但需要更详细的表达式
my @str = "(-0.345205479452055,1.3543),(-0.26027397260274,1.218),(-0.183561643835616,1.3028)");
my @arr1 = split(/(?<=\)),(?=\()/, $str);
关于my@array=$str=~/(\(.*?)/sg
?非常感谢!。它很有效。是的,元组中没有偏执。如果你不介意的话,你能解释一下代码吗。你已经使用了捕获组((.*))捕获元组。每个捕获的标量是如何进入数组的?不客气,我已经更新了这个问题,解释了匹配项将如何进入数组。
my @str = "(-0.345205479452055,1.3543),(-0.26027397260274,1.218),(-0.183561643835616,1.3028)");
my @arr1 = split(/(?<=\)),(?=\()/, $str);
my @arr2 = $str =~ /(\([^)]+\))/g;