Ruby中的正则表达式匹配字符串的第一和第二空格

时间:2018-05-04 06:00:42

标签: ruby regex replace

我正在尝试使用正则表达式匹配第一个和第二个空格,并使用“:”来自第二列字符串,如下所示,以便用“|”替换它们。我在下面建立了正则表达式,但匹配相反,因为匹配任何单词,而不是第一和第二空格,也不是“:”。也许有人可以伸出援助之手。

(\S+\s*) (\S+\s*) (\S+\s*)  # My current regex

字符串就像这些。

Usw 12:12 Desktop
Usw 1:2 Netbooks
Usw 1:345 Servers, mainframes and supercomputers

我想将这些字符串从上面转换为此

Usw|12|12|Desktop
Usw|1|2|Netbooks
Usw|1|345|Servers, mainframes and supercomputers

3 个答案:

答案 0 :(得分:5)

我们可以在这里使用gsub

input = String.new("Usw 1:345 Servers, mainframes and supercomputers")
puts input.gsub(/(\S+)\s*(\d+):(\d+)\s*(.*)/, '\1|\2|\3|\4')

Usw|1|345|Servers, mainframes and supercomputers

Demo

这里的基本思想是我们在第一个空格之前,第一个空格之后捕获非空间内容,在第二个空格之后捕获字符串的其余部分。然后我们使用这些捕获组构建您想要的输出字符串。

答案 1 :(得分:5)

我相信解决方案可能更简单:

del "C:\Program Files\Program\Directory\Subdirectory\one.txt"

如果第一列有冒号,则上述操作会失败,但我很确定情况并非如此。

答案 2 :(得分:3)

您可以使用String#sub逐步替换字符:

str.sub(/\s/,'|').sub(/:/,'|').sub(/\s/,'|')

<强>测试

test = [ "Usw 12:12 Desktop",
         "Usw 1:2 Netbooks",
         "Usw 1:345 Servers, mainframes and supercomputers" ]

test.map { |str| str.sub(/\s/,'|').sub(/:/,'|').sub(/\s/,'|') }                                                                      
 #=> [ "Usw|12|12|Desktop",
 #     "Usw|1|2|Netbooks",
 #     "Usw|1|345|Servers, mainframes and supercomputers" ]