我有一个脚本可以处理来自 CAD 程序的文件内容,以便在另一个 CAD 程序中使用。 block 中未使用的变量是否可以跳过或绕过?该脚本与它们一起工作得很好,我只是好奇是否有更简洁的编写方式。谢谢。
string = IO.read("file.txt")
string.scan(/regex/m) {|a,b,c,d,e,f,g|
# captures 7 items, I use 1-4, & 6 below, skipping 5 & 7
print a, b+".ext", c.to_f/25400000, d.to_f/25400000, f,"\n"
}
我的问题在于最后一行 - 如果我没有全部使用它们 - 我是否仍然必须全部声明它们才能正常工作并保持正确的顺序?
元素 5 和 7 可能会在以后使用,但目前,它们只是正则表达式的一部分,以便将来灵活使用。
最佳答案
由于您将变量作为 block 变量获取,因此您不能跳过顺序。问题出在您的正则表达式上。如果你有一个你不想捕获的组,你应该使用取消捕获组 (?: )
而不是捕获组 ( )
.所以改变第五和第七( )
在你的正则表达式中为 (?: )
.如果您使用的是 ruby 1.9 或在 ruby 1.8.7 上使用 oniguruma 正则表达式引擎,那么您也可以使用命名捕获;例如使用 (?<foo> )
在正则表达式中,并将 block 中捕获的字符串引用为 foo
或 $~[:foo]
.
关于ruby - Ruby 中未使用的正则表达式捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6104552/