如何从SQLite转储中过滤文件名?

时间:2013-06-25 21:46:29

标签: ruby regex arrays string filter

我正在尝试使用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和其他函数,但是不是按指定的字符将字符串拆分成数组,而是删除了字符。

2 个答案:

答案 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.basenameFilename.basename仅返回文件名和扩展名。