【问题标题】:Change every word in a paragraph with Ruby使用 Ruby 更改段落中的每个单词
【发布时间】:2014-02-10 06:10:16
【问题描述】:

所以我在用 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.

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

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

【问题讨论】:

  • 我想这取决于你想对每个单词做什么......
  • 你想让这句话有意义吗?因为否则你可以只分割空格和所有已知的标点符号并替换所有标记并重新加入

标签: ruby algorithm paragraphs


【解决方案1】:

将 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 方法可以在没有正则表达式的情况下工作,但你明白了。

【讨论】:

  • 太棒了。完全没有在文档中看到 gsub。我一定是个盲人。此外, %q 非常棒。谢谢!
【解决方案2】:

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

s = "This is a test, ok?  Yes, fine!"
s.gsub!(/\b(\w+)\b/) {|x| "_#{x}_"}
s = "_This_ _is_ _a_ _test_, _ok_?  _Yes_, _fine_!"

【讨论】:

  • 这与上面的答案非常相似,只是正则表达式略有不同。如果只是/\w+/,你为什么选择/\b(\w+)\b/
  • +1 比我更能说明换词。但正如 Icco 所说,为什么要使用复杂的正则表达式?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-16
  • 2020-08-18
  • 2015-07-03
  • 1970-01-01
  • 2022-10-15
  • 2021-07-28
  • 1970-01-01
相关资源
最近更新 更多