如何在Ruby Languange上用两个模式划分字符串?

时间:2019-01-20 18:30:43

标签: arrays ruby regex string

我有一个字符串:

<div class="capbg1">
    <label>
        <input type="text" class="form-control2 pull-right" value="<?php echo $capcode2;?>" name="captcha" disabled>
    </label>
</div>

是否可以在句点和空格之间拆分字符串,但仅将句点保留在数组中?

string = "Yellow.car Red.Bag Blue.eyes"

最好使用['Yellow','.','Car','Red','.','Bag','Blue','.','Eyes'] 的正则表达式。

4 个答案:

答案 0 :(得分:0)

肯定有比这更有效的方法,但无论如何:

str = "Yellow.car Red.Bag Blue.eyes"
str.split(" ").map { |s| s.split(/([.])/) }.flatten.map(&:capitalize)
# => ["Yellow", ".", "Car", "Red", ".", "Bag", "Blue", ".", "Eyes"]

答案 1 :(得分:0)

有很多方法可以做到。

例如:

str = "Yellow.car Red.Bag Blue.eyes"
str.gsub('.', ' . ').split(' ').map(&:capitalize)
#=> ["Yellow", ".", "Car", "Red", ".", "Bag", "Blue", ".", "Eyes"]

首先替换“。”至 ' 。 '。

然后切片字符串。

最后写首字母大写。

答案 2 :(得分:0)

在这里,使用String#scanString#split更方便。

str = "Yellow.car Red.Bag Blue.eyes"

str.scan(/\p{Alpha}+|\./).map(&:capitalize)
  #=> ["Yellow", ".", "Car", "Red", ".", "Bag", "Blue", ".", "Eyes"]

正则表达式为“匹配一个或多个(大写或小写)字母或一个句点”。可以用[[:alpha:]]代替\p{Alpha}。两种文档(Unicode字母)位于Regexp

答案 3 :(得分:0)

.split(/(\.)|\s+/)

String#split中使用捕获组时,匹配项将与拆分项一起返回。

我们将同时匹配句点(\.)和空格(\s+)。由于捕获组((\.)),阵列中仅包含句点。空格仍然会造成分裂,但空格本身将不会保留。