Perl:有没有办法分割最后一个正则表达式匹配?

时间:2009-07-08 14:05:03

标签: perl string hash split

这是一个有趣的问题。是否可以在最后一个匹配的正则表达式上拆分字符串?

考虑我的数据文件中的以下列标题列表(沿同一行读取,以制表符分隔):

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})创建子哈希值会很高兴,这就是为什么我要分割每个标题的最后一个空格

请注意,由于在找到最终匹配项之前可能出现任意数量的空格,因此情况变得更加困难。

我想过要反转字符串,执行一次拆分,然后分别重新反转两个字符串,但这对我来说太麻烦了。有没有更简洁的方法来做到这一点?

3 个答案:

答案 0 :(得分:10)

您可以使用纯正则表达式匹配,而不是使用split

my ($label, $type) = /(.*)\s+(\S+)/;

答案 1 :(得分:2)

仅在没有其他空格的空格上拆分?

($subname, $subtype) = split / (?!.*? )/, $heading, 2;

答案 2 :(得分:0)

假设您了解所有类型:

($label, $type) = /(.*)\s*(min|avg|max)$/i;