[英]How to escape curly braces and backslashes in YAML with Ruby?
我的应用程序验证并导入各个供应商的数据文件。 该文件的一个验证是检查它的文件名是否是正确的格式。 我有我的正则表达式存储在我的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)
加载文件。
你可能已经猜到了,我遇到了两个问题
花括号无法正确转义。 当我把它们拿出来它工作正常,所以几乎肯定是问题所在。 显然\\
不适用于逃避,也没有'
?
我想, \\d
需要让它自己的反斜杠逃脱吗? 在那种情况下,我会在文件中使用\\\\d
吗? 这似乎也没有用。
谢谢!
我似乎无法用你已有的东西复制任何问题。
不要忘记你可能想要逃避.
最后为.tsv
和已经提到的人使用\\A
和\\Z
而不是^
和$
like '/\\Ainput_.{1,10}_company_\\d{8}\\.tsv\\Z/'
\\A
. .tsv
\\Z
'/\\Ainput_.{1,10}_company_\\d{8}\\.tsv\\Z/'
regex.yml
---
filename_regex: !ruby/regexp '/^input_.{1,10}_company_\d{8}.tsv$/'
foo: 'bar'
---
regex.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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.