我正在尝试使用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和其他函数,但它并没有根据指定的字符将字符串拆分成数组,而只是删除了字符。
发布于 2013-06-26 05:54:29
你应该能够使用带空格的.gsub('%2', ' ') %2,虽然加了引号,但应该没问题。不过,拆分确实会删除要拆分的字符。因此,您可能不想这样做,或者如果您想这样做,您可能希望使用Array#join方法和您拆分的字符的参数将其放入其中。
发布于 2013-06-26 07:33:53
我想从上面的语句中‘提取’文件名。假设我有“/src=/9/94/ folder%2FGraph.JPG”,我希望将folder%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仅返回文件名和扩展名。
https://stackoverflow.com/questions/17308148
复制相似问题