我有一个字符串,我试图从中收集一些特定的数据。我能够缩小给定字符串(有一个转义的撇号\')在主字符串中。但是,当我使用#{string}扫描字符串时,它找不到任何结果。
我很确定这是因为当一个逃脱的撇号\'是双引号,它变成" Str \'"这就是主字符串中的样子。但是,一旦插入到正则表达式中,它就会保留为" Str \\"",无法找到。
我想我的问题是我应该如何正确处理这个问题?我确定解决方案要么是更好的正则表达式,要么是更好的替代,但我不知道那些会是什么。
以下是一些示例代码:
text = "STR = {'Str\'ing', ... }"
thing = "Str'ing"
thing.gsub!("'") { "\\'" }
if text.include?("= {'#{thing}',") # => true
match_data = text.scan(/([A-Z0-9\-]+) = {'#{thing}',/)
p match_data
# => []
end
答案 0 :(得分:1)
确实有更好的方法可以做到这一点,但它似乎适用于我的目的。我换了第一个gsub!致电thing.gsub!(/'/) { "\\'" }
以使include?
电话成立。然后我添加了一个额外的thing.gsub!(/\'/) { "\\'" }
,以便正则表达式可以实际找到它。
答案 1 :(得分:0)
您可以取消gsub!
来电,因为\'
将被解释为'
。您还可以将正则表达式简化为/\w+ = {'#{thing}',/
,因为您只需要在=符号之前匹配单个单词。
所以喜欢这个
text = "STR = {'Str\'ing', ...}"
thing = 'Str\'ing'
if text.include?("= {'#{thing}',")
match_data = text.scan(/\w+ = {'#{thing}',/)
puts match_data
end