用另一个号码替换号码

时间:2010-09-10 20:33:00

标签: regex

考虑一个数字列表:

1
2
3
17
8
9
23
...etc.

我想根据另一个列表将这些数字替换为另一个数字:

1001=1
1002=2
1003=3
1004=8
1005=23
1006=9
1007=17

最快的方法是什么? (比如在Notepad ++中使用正则表达式等)

3 个答案:

答案 0 :(得分:3)

我在perl中做这种事 - 比如

%replacements = (1=>1001, 2=>1002, 3=>1003 );
while (<>) {
   chomp;
   @nums = split(/ /);
   @outnums = ();
   foreach $n (@nums) {
       $outnums[$#outnums + 1] = $replacements{$n};
   }
   print join(' ', @outnums)."\n";
}

然后运行

perl scriptname.pl < infile > outfile

答案 1 :(得分:1)

将映射放入数组(或字典中,具体取决于数字的方式):

map[oldvalue] = newvalue;

然后迭代原始列表并替换,例如:

oldlist = '1\n2\n3\n17'
map = {'1' : '1001', '2': '1002', '3' : '1003', '17' : '1007'}

result = ''
for num in oldlist.split('\n'):
    result += map[num] + '\n'

ideone

上查看

答案 2 :(得分:1)

您不需要正则表达式,因为您需要以某种方式将数字映射到其替换。这是Ruby中的一个脚本:

给出一个名为'nums'的文件,如下所示:

1
2
3

......等等......

map = {
  1 => 1000,
  2 => 2000,
  ...etc...
}
results = File.open('output','a')
File.open('nums').readlines.each do |line|
  results.write( map[line.to_i].to_s + "\n" ) if map.has_key?(line.to_i)
end

运行如下:ruby thescript.rb,文件'output'现在设置了新号码。