按'""""''或数字后面的空格

时间:2018-02-13 11:38:16

标签: ruby regex string

我有一个字符串:

string = "roll:34 name:joshi ikera"

我想通过分隔:以及roll值和name键之间的空格来拆分此字符串。输出应如下所示:

[roll, 34, name, joshi ikera]

我尝试使用:

string.split(/:|\d\s/)

但我得到的输出是:

[roll, 3, name, joshi ikera]

如何包含缺失的数字,并在数字后用空格分割?

1 个答案:

答案 0 :(得分:1)

\d\s匹配并使用空格前的数字,Regexp#split()方法删除使用的文本。在这种情况下,您需要使用一个环视,即后视,使其成为非消费模式部分/:|(?<=\d)\s/(请参阅valtlai's comment)。但是,在这种情况下,一种更常见的方法是匹配1个或多个空格字符,后面跟着1个字字符(如果键只能包含数字,字母和下划线),后跟:(参见Sagar's comment })。

我建议

s.split(/\s+(?=\w+:)|:/)
# => roll
34
name
joshi ikera

在这里,

  • \s+ - 消耗1个以上的空白字符
  • (?=\w+:) - 后面跟着1个字的字符和:
  • | - 或
  • : - 匹配并使用:

或者,如果键是唯一的

s.scan(/(\w+):(.*?)(?=\w+:|\z)/).to_h
# => {"roll"=>"34 ", "name"=>"joshi ikera"}

下面,

  • (\w+) - 将1个或多个字词字符捕获到第1组
  • : - 匹配冒号
  • (.*?) - 除了换行符之外的任何0 +字符都会被捕获到第2组中,如果紧接着
  • (?=\w+:|\z) - 1个字母字符,然后是:\w+:)或(|)字符串结尾(\z)。