如果我有一组这样的行:
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
有什么想法吗?
答案 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