【问题标题】:Sentence substitution in Ruby using String#gsub在 Ruby 中使用 String#gsub 替换句子
【发布时间】:2017-02-01 22:53:24
【问题描述】:

现在,如果我只想更改单词的一部分,该怎么办?就像“Car”到“cah”,反之亦然,在“Martha”到“Marther”。在第二种情况下,如果我只是做了这样的 if:

<if sentance.include? "er"
    user_input.gsub!(/er/, "a")
end > 

它会占用“MArthA”中的所有“a”,这不是我想要的。

有什么想法吗? 对于其他示例。 Replace words in string - ruby

【问题讨论】:

  • 如果str = "Where's Martha, Billy-Bob?",您可能想要str.gsub(/(?&lt;=\bMarth)a\b/,"er") #=&gt; "Where's Marther, Billy-Bob?" 之类的东西。 (?&lt;=\bMarth) 被称为积极的后视。它确保要替换的字符 ("a") 前面有一个分词符 (\b),后跟字符串 "Marth",但这不是匹配的一部分。如果我知道这句话只包含一个"Martha",我可以使用sub 而不是gub。你提到“cah”让我想起了Crow Mystery
  • 您需要更好地定义语法,以及完成这些转换的规则。难道只是最后一个a
  • 乌鸦的笑话很棒。基本上我的目标是建立一个从基本语言到新英格兰口音的文本输入转换器。所以使用这些规则,我只关心单词的结尾;特别是以 As 或 ERs- 结尾的词作为白话中的交换。 a$ 可能有效,但在行尾意味着什么?它是否在字符串中搜索以 As 结尾的单词?还是只取字符串中的最后一个单词-还是a\z?

标签: ruby string gsub string-substitution


【解决方案1】:

您的示例和代码表明完全相反的结果。假设您想用“er”替换 Martha 的最后一个“a”,这应该替换字符串末尾的“a”:

user_input.gsub!(/a$/,'er')

如果字符串是“玛莎,比利鲍勃呢?”:

user.gsub!(/a\b/,'er')

\b 是单词结尾或开头的匹配器

【讨论】:

  • 请注意,a$ 是行尾,不一定是字符串结尾(即a\z)。在这种情况下可能无关紧要,但在其他情况下(例如数据验证),它可能是一个安全漏洞,因此最好注意一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多