我正在尝试使用正则表达式匹配第一个和第二个空格,并使用“:”来自第二列字符串,如下所示,以便用“|”替换它们。我在下面建立了正则表达式,但匹配相反,因为匹配任何单词,而不是第一和第二空格,也不是“:”。也许有人可以伸出援助之手。
(\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
答案 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
这里的基本思想是我们在第一个空格之前,第一个空格之后捕获非空间内容,在第二个空格之后捕获字符串的其余部分。然后我们使用这些捕获组构建您想要的输出字符串。
答案 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" ]