这是一个有趣的问题。是否可以在最后一个匹配的正则表达式上拆分字符串?
考虑我的数据文件中的以下列标题列表(沿同一行读取,以制表符分隔):
Frequency Min
Frequency Avg
Frequency Max
Voltage L1 Min
Voltage L1 Avg
Voltage L1 Max
Active Power L1 Min
Active Power L1 Avg
Active Power L1 Max
目前,我的数据作为数组附加到每个列(例如@{ $data{Frequency Min} }
,@{ $data{Active Power L1 Avg} }
)。能够根据Min,Max和Avg关键字(例如@{ $data{Frequency}{Min} }
,@{ $data{Active Power L1}{Avg}
)创建子哈希值会很高兴,这就是为什么我要分割每个标题的最后一个空格
请注意,由于在找到最终匹配项之前可能出现任意数量的空格,因此情况变得更加困难。
我想过要反转字符串,执行一次拆分,然后分别重新反转两个字符串,但这对我来说太麻烦了。有没有更简洁的方法来做到这一点?
答案 0 :(得分:10)
您可以使用纯正则表达式匹配,而不是使用split
:
my ($label, $type) = /(.*)\s+(\S+)/;
答案 1 :(得分:2)
仅在没有其他空格的空格上拆分?
($subname, $subtype) = split / (?!.*? )/, $heading, 2;
答案 2 :(得分:0)
假设您了解所有类型:
($label, $type) = /(.*)\s*(min|avg|max)$/i;