在Ruby中使用未知标点符号进行字符串拆分

Jon*_*n_W 2 ruby string split join

我正在构建一个下载句子并解析它们以进行文字游戏的应用程序.我事先并不知道文本将包含哪些标点符号.

我希望能够将句子分开,检查它们的词性标记,如果找到了正确的标记,请将其替换为" ",并按顺序重新加入它们.

text = "some string, with punctuation- for example: things I don't know about, that may or may not have     whitespaces and random characters % !!"
Run Code Online (Sandbox Code Playgroud)

我怎样才能将它拆分成一个数组,以便我可以将解析器传递给每个单词,并按顺序重新加入它们,同时要记住我string.split(//)似乎需要知道我在寻找什么标点符号?

saw*_*awa 6

split当您可以更容易地描述分隔符而不是要提取的部分时,它非常有用.在您的情况下,您可以更轻松地描述要提取的部分而不是分隔符,在这种情况下scan更适合.这是一个错误的决定split.你应该scan.

text.scan(/[\w']+/)
# => ["some", "string", "with", "punctuation", "for", "example", "things", "I", "don't", "know", "about", "that", "may", "or", "may", "not", "have", "whitespaces", "and", "random", "characters"]
Run Code Online (Sandbox Code Playgroud)

如果你想要替换匹配,更有理由不使用split.在这种情况下,你应该使用gsub.

text.gsub(/[\w']+/) do |word|
 if word.is_of_certain_part_of_speech?
   "___"  # Replace it with `"___"`.
 else
   word   # Put back the original word.
 end
end
Run Code Online (Sandbox Code Playgroud)