1

所以我在用 Ruby 编码,我有几句话:

The sky above the port was the color of television, tuned to a dead channel. "It's not like I'm using," Case heard someone say, as he shouldered his way through the crowd around the door of the Chat. "It's like my body's developed this massive drug deficiency." It was a Sprawl voice and a Sprawl joke. The Chatsubo was a bar for professional expatriates; you could drink there for a week and never hear two words in Japanese.

而且我需要在不改变结构的情况下修改段落中的每个单词。我最初的想法是在空格上拆分然后重新加入,但问题是你也会得到标点符号。如果您拆分以便只听单词,则很难重新加入,因为您不知道正确的标点符号。

有没有比传统的拆分、映射、加入组合更好的方法来做到这一点?或者也许只是一个很好的拆分正则表达式,所以很容易重新加入?

4

2 回答 2

3

将 gsub 与块一起使用:

str = %q(The sky above the port was the color of television, tuned to a dead channel.
"It's not like I'm using," Case heard someone say, as he shouldered his way through the crowd
around the door of the Chat. "It's like my body's developed this massive drug deficiency."
It was a Sprawl voice and a Sprawl joke. The Chatsubo was a bar for professional expatriates;
you could drink there for a week and never hear two words in Japanese.)

puts str.gsub(/\w+/){|word| word.tr('aeiou','uoaei') }

结果:

Tho sky ubevo tho pert wus tho celer ef tolovasaen, tinod te u doud chunnol.
"It's net lako I'm isang," Cuso hourd semoeno suy, us ho sheildorod has wuy threigh tho crewd
ureind tho deer ef tho Chut. "It's lako my bedy's dovolepod thas mussavo drig dofacaoncy."
It wus u Spruwl veaco und u Spruwl jeko. Tho Chutsibe wus u bur fer prefossaenul oxputrautos;
yei ceild drank thoro fer u wook und novor hour twe werds an Jupunoso.

好吧,这个#tr 方法可以在没有正则表达式的情况下工作,但你明白了。

于 2011-02-07T21:48:52.900 回答
3

我会用正则表达式匹配单词边界之间的单词以避免影响标点符号或空格,例如:

s = "This is a test, ok?  Yes, fine!"
s.gsub!(/\b(\w+)\b/) {|x| "_#{x}_"}
s = "_This_ _is_ _a_ _test_, _ok_?  _Yes_, _fine_!"
于 2011-02-07T21:49:44.610 回答