使用正则表达式进行字符串解析

时间:2013-03-13 17:00:22

标签: ruby regex

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

"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个参数,是urls,整数和小数的混合。我无法弄清楚我将使用的分割方法的正则表达式。请帮忙! 这就是我想出的 - 这是错误的。

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

3 个答案:

答案 0 :(得分: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"]

答案 1 :(得分:2)

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

string.scan( /'.+?'|[-0-9.]+/ )

答案 2 :(得分:0)

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

对于在一般情况下解析这个复杂的东西,你真的想要对字符串进行适当的标记化(即词法分析)。在过去使用Ruby时,我在使用Citrus时有很好的经验。它是解析复杂令牌/语言的好宝石,就像你想要的那样。你可以在这里找到更多相关信息:

https://github.com/mjijackson/citrus