代码之家  ›  专栏  ›  技术社区  ›  user1934428

在Ruby中标记字符串的更好方法?

  •  3
  • user1934428  · 技术社区  · 10 年前

    我有一串任意字符。我想把它变成一个数组,每个字符都在一个数组元素中,除了连续的单词字符 (\w+) ,它们应该在一个数组元素中结束。例子:

    ab.:u/87z
    

    应该成为

    ['ab','.',':','u','/','87z']
    

    我的第一种方法是这样的:

    mystring.split(/\b/)
    

    当然,这将非单词字符分组在一起:

    ['ab','.:','u','/','87','z']
    

    我可以在接下来的步骤中将它们拆开,但我正在寻找一种更优雅的方式。接下来我尝试了这些:

    mystring.split(/(\w+|\W)/)
    mystring.split(/(\b|\W)/)
    

    两者都返回了几乎所需的结果,只是它们还返回了包含空字符串的数组元素,所以我必须编写如下内容

    mystring.split(/(\b|\W)/).reject(&:empty?)
    

    现在我的问题是:有没有更简单的方法来做到这一点?

    更新 我解释我的例子时犯了一个愚蠢的错误。当然,“87”和“z”应该在一起,即“87z”。我修正了我的例子。

    2 回复  |  直到 10 年前
        1
  •  4
  •   Casimir et Hippolyte    10 年前

    不要使用分割,使用扫描方法:

    > "ab.:u/87z".scan(/\w+|\W/)
    => ["ab", ".", ":", "u", "/", "87z"]
    
        2
  •  4
  •   cozyconemotel    10 年前
    'ab.:u/87z'.scan(/\w+|./)    #=>["ab", ".", ":", "u", "/", "87z"]
    

    我不确定你想要什么,因为你说的是单词字符 (\w+) 但将 87 z 如果我是对的, \w 应匹配字母、数字和下划线。因此 "87z" .

    'ab.:u/87z'.scan(/[A-Za-z]+|\d+|./)    #=>["ab", ".", ":", "u", "/", "87", "z"]
    

    你总是可以这样做来实现你在那里展示的东西

    推荐文章