正则表达式捕获用引号分隔的多个令牌逗号

时间:2014-12-09 05:46:59

标签: java c# .net regex

我确实有一个挑战来改进一个试图解析输入字符串的正则表达式,如下所示

输入字符串如下

String input = "";
    CProfi ( "USA2.00", "zeBra")
    BFile(3F2, TTT, 10)
    SVendor(D&D)
    // JohnDow(2255, 99, "Joe")
    SProtocol(11.32_DD, 99)
    SProtocol(22.22_C&c)
    Description("Boo")
    Test(d)
    TTTTT(000000)
    Descr3("Hello Worlkd!", "I am back", 3)

我确实尝试使用以下Regex的许多变体,但没有成功

Regex = "^\s*(?<Key>[^\(]+)\s*\(\s*(?<Param>(".*?"|[^",\s]+)(?=\s*,|\s*))"

任何帮助修复此模式以便捕获所有参数,不仅是第一个参数还是最后一个参数

1 个答案:

答案 0 :(得分:0)

使用需要使用\G锚来进行连续的字符串匹配。

(?:(?<Key>\S+) *\( *|(?<!^)\G) *"?(?<param>[^",\n]*)"?,?(?=[^()\n]*\))

DEMO

<强>更新

(?:^(?:(?!\/\/).)*\b(?<Key>\S+) *\( *|(?<!^)\G) *"?(?<param>[^",\n]*)"?,?(?=[^()\n]*\))

DEMO