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

Ger*_*Cas 1 ruby regex replace

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

(\S+\s*) (\S+\s*) (\S+\s*)  # My current regex
Run Code Online (Sandbox Code Playgroud)

字符串就像这些.

Usw 12:12 Desktop
Usw 1:2 Netbooks
Usw 1:345 Servers, mainframes and supercomputers
Run Code Online (Sandbox Code Playgroud)

我想把这些字符串从上面转换成这个

Usw|12|12|Desktop
Usw|1|2|Netbooks
Usw|1|345|Servers, mainframes and supercomputers
Run Code Online (Sandbox Code Playgroud)

Tim*_*sen 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
Run Code Online (Sandbox Code Playgroud)

演示

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


Ale*_*kin 5

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

'Usw 12:12 Desktop'.split(/\s|:/, 4).join('|')
#? "Usw|12|12|Desktop"
Run Code Online (Sandbox Code Playgroud)

如果第一列有冒号,上面的内容将失败,但我很确定情况并非如此.