Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 按嵌入行中的数字进行正则表达式排序_Regex - Fatal编程技术网

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]} <>;