2013-03-10 51 views
1

我在由“@number”表示的字符串中有一些序列(/ @ \ d /) 我想删除任何冗余序列,其中@ 2后面跟着@ 2, 如果在文本中的某处直接找到另一个相同的@数字序列,那么我只想删除它们,因此对于@[email protected],将删除2nd @ 2,但对于@[email protected]@2dolor,因为@ 1位于两个@ 2序列之间,所以不会删除任何内容。如果前面有相同的序列,则从字符串中删除序列

"@[email protected]@[email protected]@[email protected]" 

变为:

"@[email protected]@2bla2bla2 

回答

1
"@[email protected]@[email protected]@[email protected]".gsub /(?<=(@\d))([^@]*)\1/,'\2' 
=> "@[email protected]@2bla2bla2" 
+0

您先生是正则表达式的主人。+1 – user21033168 2013-03-10 15:45:38

+0

你会用这种方式遇到麻烦,如'@ 2foo @ 22bar' – pguardiario 2013-03-10 22:36:01

+0

@pguardiario,据我所知,你的意思是说,@ 22!= @ 2,但正如我所看到的,'(/@ \ d /)'表示一个数字。我得到''@ 2foo2bar'',是不是错误? – Nakilon 2013-03-11 09:34:27

-1

容易...分裂您的字符串到一个数组,然后比较这之后自带的数量。如果相同,请将其移除。复杂的(通过不那么多),是你不能从数组中删除条目,而循环它们...所以你需要做的是做一个递归函数......这是伪:

- =全局值= -
Decalre字符串数组,并将其设置到OriginalString.SplitOn( “@”)

- =方法RemoveLeadingDuplicates = -
申报计数器
声明RemoveIndex
循环为每个字符串中字符串数组

   如果以前的铅==电流引线
       集RemoveIndex
       从回路断线
   其他
       以前的铅=电流引线

增加计数器,由1
end loop

如果RemoveIndex不为空
   在指定索引从数组中删除元素
   呼叫RemoveLeadingDuplicates

返回

0
my_string = "@[email protected]@[email protected]@[email protected]" 

prev_sequence = String.new 
penultimate_index = my_string.length - 2 

for i in 0..penultimate_index 
    if my_string[i] == '@' 
    new_sequence = "@#{my_string[i+1]}" 
    if new_sequence == prev_sequence 
     my_string.slice!(i, 2) 
    else 
     prev_sequence = new_sequence 
    end 
    end 
end 


puts my_string 
+0

THX,这个工作得很好:) – user21033168 2013-03-10 04:30:59

1

你可以把它分割成tokens:

my_string = "@[email protected]@[email protected]@[email protected]" 
tokens = my_string.scan /(@\d+)?((?:([email protected]\d+).)*)/ 
#=> [["@2", "randomtext"], ["@2", "randomtext"], ["@2", "randomtext"], ["@1", "bla"], ["@2", "bla2"], ["@2", "bla2"]] 

然后块,地图和加盟:

tokens.chunk{|x| x[0].to_s}.map{|n, v| [n, v.map(&:last)]}.join 
#=> "@[email protected]@2bla2bla2" 
+0

美丽,不需要暴殄天物变量的任何答案是我的首选答案。你也给了我一些新的东西来学习,从来没有遇到过大块! – user21033168 2013-03-10 13:23:56

+0

因为'.chunk'只出现在1.9.2中 – Nakilon 2013-03-10 15:08:11

相关问题