0

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

4

2 回答 2

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仅返回文件名和扩展名。

于 2013-06-25T23:33:52.880 回答
0

您应该能够使用.gsub('%2', ' ')带有空格的 %2 ,而引用它应该没问题。不过,Split 确实删除了正在拆分的字符。因此,您可能不想这样做,或者如果您这样做,您可能希望使用该Array#join方法与您拆分的角色的参数一起将其放回原处。

于 2013-06-25T21:54:28.753 回答