我需要在ruby中解析一个字符串,其中包含大量的id和名称,如{2,Shahar}
。
字符串是这样的:
text = "Hello {1,Micheal}, my name is {2,Shahar}, nice to meet you!"
当我尝试解析它时,正则表达式跳过第一个}
,我得到这样的结果:
text.gsub(/\{(.*),(.*)\}/, "\\2(\\1)")
=> "Hello Shahar(1,Micheal}, my name is {2), nice to meet you!"
所需的重播应该是:
=> "Hello Michael(1), my name is Shahar(2), nice to meet you!"
我会感谢任何可以提供帮助的人。
由于 沙哈尔
答案 0 :(得分:1)
贪婪的.*
匹配太多了。它表示“任何字符串,最大可能长度”。因此,第一个(.*)
匹配1,Micheal}, my name is {2
,然后逗号匹配逗号,第二个(.*)
匹配Shahar
(最终\}
匹配结束括号。
更具体地说。例如,您可以将匹配限制为仅允许除大括号之外的字符,以确保匹配永远不会超出{...}
部分的范围:
text.gsub(/\{([^{}]*),([^{}]*)\}/, "\\2(\\1)")
或者你可以这样做:
text.gsub(/\{([^,]*),([^}]*)\}/, "\\2(\\1)")
其中第一部分可以是任何不包含逗号的字符串,第二部分可以是任何不包含}
的字符串。