gpt4 book ai didi

ruby - 如何使用 Ruby 转义 YAML 中的大括号和反斜杠?

转载 作者:数据小太阳 更新时间:2023-10-29 08:11:40 26 4
gpt4 key购买 nike

我的应用验证并导入各个供应商的数据文件。对文件的验证之一是检查文件名的格式是否正确。我将我的正则表达式与各种其他配置一起存储在我的 YAML 文件中,如下所示 -

---
filename_regex: !ruby/regexp '/^input_.{1,10}_company_\d{8}.tsv$/'
check_header_row: true
foo: "Bar"
....

本质上,上面强制要求它必须是以下格式:input_companyName_company_20141127.tst。我在应用程序中使用 YAML.load(filename) 加载文件。

我遇到了两个问题,你可能已经猜到了

  1. 花括号没有正确转义。当我把它们拿出来时它工作正常,所以几乎可以肯定这些是问题所在。显然 \ 不能用于转义,' 也不能?

  2. 我想 \d 需要转义它自己的反斜杠?在那种情况下,我会在文件中使用 \\d 吗?这似乎也不起作用。

谢谢!

最佳答案

我似乎无法用你已经拥有的东西来复制任何问题。

不要忘记您可能希望在 .tsv 的末尾转义 . 并且正如有人已经提到的那样使用 \A\Z 而不是 ^$'/\Ainput_.{1,10}_company_\d{8}\.tsv\Z/'

正则表达式.yml

---
filename_regex: !ruby/regexp '/^input_.{1,10}_company_\d{8}.tsv$/'
foo: 'bar'
---

正则表达式.rb

require 'yaml'

cfg = YAML.load_file('regex.yml')

valid_test_name = 'input_ABCD_company_12345678.tsv'
invalid_company_test_name = 'input_CompanyTooLong_company_12345678.tsv'
invalid_date_test_name = 'input_Company_company_12345678901.tsv'

valid_pass = valid_test_name =~ cfg["filename_regex"] ? 'pass' : 'fail'
invalid_company_pass = invalid_date_test_name =~ cfg["filename_regex"] ? 'pass' : 'fail'
invalid_date_pass = invalid_date_test_name =~ cfg["filename_regex"] ? 'pass' : 'fail'

puts "#{valid_test_name}: #{valid_pass}"
puts "#{invalid_company_test_name}: #{invalid_company_pass}"
puts "#{invalid_date_test_name}: #{invalid_date_pass}"

运行 ruby regex.rb 输出

input_ABCD_company_12345678.tsv: pass
input_CompanyTooLong_company_12345678.tsv: fail
input_Company_company_12345678901.tsv: fail

关于ruby - 如何使用 Ruby 转义 YAML 中的大括号和反斜杠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33966649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com