0

我有一个字符串,它是一个函数调用。我想解析它并获取参数:

"add_location('http://abc.com/page/1/','This is the title, it is long',39.677765,-45.4343,34454,'http://abc.com/images/image_1.jpg')"

它共有6个参数,是url、整数和小数的混合体。我无法弄清楚我将使用的 split 方法的正则表达式。请帮忙!这就是我想出的——这是错误的。

/('(.*\/[0-9]*)',)|([0-9]*,)/
4

3 回答 3

3

像 CSV 一样处理字符串可能会起作用:

require 'csv'
str = "add_location('http://abc.com/page/1/','This is the title, it is long',39.677765,-45.4343,34454,'http://abc.com/images/image_1.jpg')"
p CSV.parse(str[13..-2], :quote_char => "'").first
# => ["http://abc.com/page/1/", "This is the title, it is long", "39.677765", "-45.4343", "34454", "http://abc.com/images/image_1.jpg"]
于 2013-03-13T17:52:23.370 回答
2

假设所有非数字参数都用单引号引起来,如您的示例

string.scan( /'.+?'|[-0-9.]+/ )
于 2013-03-13T17:18:33.253 回答
0

你真的不想用正则表达式解析这么复杂的东西;从长远来看,它只是行不通。我不确定您是否只想解析这个字符串,或者这种形式的字符串是否有很多确切内容不同的字符串。如果您提供有关最终目标的更多信息,您可能可以获得更详细的帮助。

对于在一般情况下解析这种复杂的事物,您确实希望对字符串执行适当的标记化(即词法分析)。在过去使用 Ruby 时,我在使用 Citrus 时有过很好的经验。它是解析复杂标记/语言的好工具,就像您尝试做的那样。你可以在这里找到更多关于它的信息:

https://github.com/mjijackson/citrus

于 2013-03-13T17:11:36.527 回答