Regex 按嵌入行中的数字进行正则表达式排序
如果我有一组这样的行:Regex 按嵌入行中的数字进行正则表达式排序,regex,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有两个分量,第一个分量是在每行中找到第二个数字。 对于这个,您可以使用正则表达式: ^[^0-9]*[0-9]+[^0-9]+([0-9]+) 然后需要根据提取的值对行进行排序 您可能不希望对每
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有两个分量,第一个分量是在每行中找到第二个数字。 对于这个,您可以使用正则表达式:
^[^0-9]*[0-9]+[^0-9]+([0-9]+)
然后需要根据提取的值对行进行排序
您可能不希望对每行应用一次以上,因此应该将值与该行一起保存(基于您可以使用提供的Pair类或编写自己的Pair类的语言)。
然后只需排序(同样根据语言有不同的排序方式)。由于您没有指定编程语言,我假设您可以使用任何语言的解决方案。下面是一个快速的Python解决方案(其中,
行
是行的列表):
我认为正则表达式搜索/替换语法不能单独用于排序。如果您正在处理文本文件或其他内容,请在注释中尝试Oli Charlesworth的解决方案。如果您正在编写脚本或程序,可以使用正则表达式(或explode()或其他方法,具体取决于语言)从每行中提取相关数字,将其转换为该行的数组键,然后对数组排序并重新输出这些行 假设这些行包含在传递给Perl脚本的文件中,则可以执行以下操作:
my @sorted = map $_->[0],
sort {$a->[3] <=> $b->[3]}
map {chomp; [$_, split]} <>;
my@sorted=map$\ux->[0],
排序{$a->[3]$b->[3]}
映射{chomp;[$,split]};
使用哪种编程语言?如果这恰好是Linux命令行,那么您可以只在正则表达式中使用sort-k2-n
。不,不是家庭作业,是为了考试而学习,所以我试着头脑风暴一下可能会问到的问题。@user1161080:正则表达式不做排序。
my @sorted = map $_->[0],
sort {$a->[3] <=> $b->[3]}
map {chomp; [$_, split]} <>;