按行嵌入的数字排序正则表达式

时间:2012-03-19 02:07:06

标签: regex

如果我有一组这样的行:

hello 23 543 bye
cat 34 234 dog
meow 39 485 bark

我如何按每行中的第二个数字对每一行进行排序?例如,我希望最终的解决方案是

cat 34 234 dog
meow 39 485 bark
hello 23 543 bye

因为234 <485 <543

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

假设这些行包含在传递给Perl脚本的文件中,这将执行:

my @sorted = map $_->[0], 
    sort {$a->[3] <=> $b->[3]}
    map {chomp; [$_, split]} <>;

答案 1 :(得分:1)

我不认为正则表达式搜索/替换语法可以用于自己进行排序。如果您正在处理文本文件或其他内容,请在评论中尝试Oli Charlesworth的解决方案。如果您正在编写脚本或程序,则可以使用正则表达式(或explode()或其他方法(取决于语言)从每行提取相关数字,将其转换为该行的数组键,然后对数组进行排序并重新输出行。

答案 2 :(得分:0)

有两个组成部分,第一个是在每一行中找到第二个数字。 对于这个你可以使用正则表达式:

^[^0-9]*[0-9]+[^0-9]+([0-9]+)

然后您需要按此提取的值对行进行排序。

您可能不希望每行应用多次,因此您可以将该值与该行一起保存(根据您可以使用提供的Pair类的语言或编写自己的语言)。 然后只需排序(再次根据语言有不同的排序方式)。

答案 3 :(得分:0)

由于您没有指定编程语言,因此我假设您已开放使用任何语言的解决方案。这是一个快速的Python解决方案(其中lines是行列表):

def second_num(line):
    found_first = False
    for token in line.split():
            if re.match(r'\d+', token):
                    if found_first:
                            return int(token)
                    found_first = True
    return 0

lines.sort(key=second_num) # Sorts lines in-place by the second number