【问题标题】:Splitting a string into words and punctuation with Ruby使用 Ruby 将字符串拆分为单词和标点符号
【发布时间】:2015-08-17 02:18:37
【问题描述】:

我正在使用 Ruby,我想将字符串及其标点符号拆分为一个数组,但我想将撇号和连字符视为单词的一部分。例如,

s = "here...is a     happy-go-lucky string that I'm writing"

应该变成

["here", "...", "is", "a", "happy-go-lucky", "string", "that", "I'm", "writing"].

我得到的最接近的仍然不够,因为它没有正确地将连字符和撇号视为单词的一部分。

这是迄今为止我得到的最接近的:

s.scan(/\w+|\W+/).select {|x| x.match(/\S/)}

产生

["here", "...", "is", "a", "happy", "-", "go", "-", "lucky", "string", "that", "I", "'", "m", "writing"]

.

【问题讨论】:

  • 如果撇号是单词的一部分,为什么here...is 不是一个完整的单词?
  • hereis 在语义上是不同的词,尽管我正在分析的文本有时涉及不良的标点习惯(我正在解析一些 Yelp 评论^_^)。

标签: ruby regex


【解决方案1】:

您可以尝试以下方法:

s.scan(/[\w'-]+|[[:punct:]]+/)
#=> ["here", "...", "is", "a", "happy-go-lucky", "string", "that", "I'm", "writing"]

【讨论】:

  • 哇,你能参考一下你从哪里得到:punct: 的东西吗?
  • 可以参考POSIX类here
【解决方案2】:

你很亲密:

s.scan(/[\w'-]+|[.,!?]+/)

我们的想法是匹配其中可能包含'/- 的单词或标点符号。

【讨论】:

    【解决方案3】:

    在几乎放弃然后又修补了一些之后,我似乎已经解决了这个难题。这似乎有效:s.scan(/[\w'-]+|\W+/).select {|x| x.match(/\S/)}。它产生["here", "...", "is", "a", "happy-go-lucky", "string", "that", "I'm", "writing"]

    有没有更简洁的方法可以做到这一点,而不必使用#select

    【讨论】:

      【解决方案4】:

      使用split方法。

      例子:

      str = "word, anotherWord, foo"
      puts str.split(",")
      

      返回

      word
      anotherWord
      foo
      

      希望它对你有用!

      你也可以看看这个http://ruby.about.com/od/advancedruby/a/split.htm

      【讨论】:

        猜你喜欢
        • 2010-09-26
        • 2012-11-16
        • 2013-12-25
        • 2022-08-12
        • 2018-11-17
        • 1970-01-01
        • 2011-07-10
        相关资源
        最近更新 更多