我正在尝试使用Ruby从SQLite文本转储中过滤掉所有文件名。我不是非常方便/熟悉正则表达式,并且需要一种方法来读取和写入文件,这是SQLite转储中的另一个图像文件转储。我可以过滤掉除此之外的所有内容:
VALUES(3,5,1,43,'/images/e/e5/Folder%2FOrders%2FFinding_Orders%2FView_orders3.JPG','1415',NULL);
和此:
src="/images/9/94/folder%2FGraph.JPG"
我无法找出最简单的过滤方法。我尝试过使用split和其他函数,但是不是按指定的字符将字符串拆分成数组,而是删除了字符。
答案 0 :(得分:0)
你应该可以使用.gsub('%2', ' ')
%2和空格,虽然引用,但应该没问题。
但是,Split会删除正在拆分的字符。因此,您可能不想这样做,或者如果您这样做,您可能希望将Array#join
方法与您拆分的字符的参数一起使用以将其重新放入。
答案 1 :(得分:0)
我想从上面的语句中“提取”文件名。假设我有src =“/ images / 9/94 / folder%2FGraph.JPG”,我想要提取文件夹%2FGraph.JPG。
如果要提取src
参数中的内容:
foo = 'src="/images/9/94/folder%2FGraph.JPG"'
foo[/^src="(.+)"/, 1]
=> "/images/9/94/folder%2FGraph.JPG"
返回不带括号的字符串。
以下是第一个如何做的事情:
bar = "VALUES(3,5,1,43,'/images/e/e5/Folder%2FOrders%2FFinding_Orders%2FView_orders3.JPG','1415',NULL);"
bar.split(',')[4][1..-2]
=> "/images/e/e5/Folder%2FOrders%2FFinding_Orders%2FView_orders3.JPG"
并非编程中的所有内容都是正则表达式问题。事实上,在我看来,大多数事情都不是候选人。例如,第一个例子可以写成:
foo.split('=')[1][1..-2]
和第二个:
bar[/'(.+?)'/, 1]
我们的想法是使用最干净,最清晰,最易理解的东西。
如果你想要的只是文件名,那么使用一个只返回文件名的方法。
使用上述之一并将其输出传递给File.basename
。 Filename.basename
仅返回文件名和扩展名。