ruby - Ruby 中未使用的正则表达式捕获

标签 ruby regex arrays string block

我有一个脚本可以处理来自 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/

相关文章:

ruby-on-rails - rails : Testing Cron Jobs in development environment

ruby-on-rails - 创建 Rails gem

javascript - 将变量传递给 Gatsby graphql 查询中的正则表达式

regex - 如何在Elasticsearch正则表达式中排除子字符串

php连接数组的两个元素

arrays - 遍历 Go 中的任意可迭代数据结构

调用函数后 C 数组损坏

ruby-on-rails - Rails 类名称/类型不适用于多态 has_many :through

ruby-on-rails - 如何获得最佳性能 rails 请求并行 sidekiq worker

javascript - jquery 正则表达式