ruby - 奇怪的行为破坏了字符串的某些部分,但只有特定的字符,Atom,RSpec

标签 ruby string rspec split atom-editor

我遇到了一个奇怪的情况。我有一个函数,它遍历字符串数组并将每个字符串拆分为“is”,它正在 RSpec 中进行测试,如下所示:

测试体

info_combo = ["pish pish Iron is 3910 Credits","glob prok Gold is 57800 Credits"]
expect(interpreter.solveForUnknownInfo(info_combo)).to eq some_final_expectable_object

函数

def getSubjectsAndObjects(info_combo)
   subjects = []
   objects = []
  info_combo.each do |info_str|
    print info_str
    subjectsAndObjects = info_str.split("is")
    print subjectsAndObjects
    subjects << subjectsAndObjects[0]
    objects << subjectsAndObjects[1]
  end
return subjects, objects
end

调试时的打印输出

"pish pish Iron is 3910 Credits" => first iteration input
["p", "h p", "h Iron ", " 3910 Credits"] => crazy unexpected
"glob prok Gold is 57800 Credits"   => second iteration input
["glob prok Gold ", " 57800 Credits"] => expectable output

## 在将第二个输入字符串的第一个子字符串“pish”替换为“another_random_word”之后 ...

"another_random_word pish Iron is 3910 Credits" => first iteration input
["another_random_word p", "h Iron ", " 3910 Credits"] =>some hopeful change
"glob prok Gold is 57800 Credits" => second iteration input
["glob prok Gold ", " 57800 Credits"] => expectable output

## 用“another_random_word”替换最后的“pish”之后

"another_random_word another_random_word Iron is 3910 Credits" => first iteration input
"another_random_word another_random_word Iron ", " 3910 Credits"] => now totally expectable/desired output from function
"glob prok Gold is 57800 Credits" => second iteration input
["glob prok Gold ", " 57800 Credits"] => expectable output

这让我很困惑。我不知道如何调试这个或可能出问题的想法。我认为这是一个文本编辑器故障(Atom),重新启动了程序并且没有任何变化。

我错过了什么?有任何想法吗?也非常欢迎关于改进问题/标题的想法。

最佳答案

您错过了相当简单的事情:“pish” 的中间两个字符是 “is”。所以当然,如果您根据 “is” 拆分,它会拆分为 “p”“h”

有几种方法可以解决这个问题。在您的情况下,最简单的方法可能是在 "is " 上拆分(即,"is"的每一侧都有一个空格)。根据具体需要,您可以改为拆分正则表达式,例如 /\sis\s/(“is”在两边带有某种 whitespace,可以是空格、制表符等)或 /\bis\b/(“is”两边都有一个 word boundary - 在这种情况下,“is”不能在单词的中间,而是周围的空格实际上不是匹配项的一部分,因此不会从字符串中删除)。

 "his is hers".split(/\sis\s/) # => ["his", "hers"]
 "his is hers".split(/\bis\b/) # => ["his ", " hers"]

请注意,在第一种情况下,空格是定界符的一部分并与其一起被删除,但在第二种情况下,它们不是定界符的一部分,因此不会被删除。

关于ruby - 奇怪的行为破坏了字符串的某些部分,但只有特定的字符,Atom,RSpec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40618025/

相关文章:

mysql - 为什么是语法错误?

ruby - bundle.setup 和 bundle.require 有什么区别

ruby open-uri打开方法丢失文件扩展名打开图片

ruby-on-rails - Rails 3 + CarrierWave + Rspec : model validation

ruby-on-rails - 类已泄漏到另一个示例中,并且不能再在规范中使用

ruby - 在 Textmate for Ruby 中自动完成?

ruby - 为什么 Ruby 没有真正的 StringBuffer 或 StringIO?

c - 为什么我会遇到段错误(strcmp 或 fgets)?

python - 为什么我收到 AttributeError : __getitem__

ruby-on-rails - Capybara webkit 在 RSpec 测试中将我重定向到 example.com