【问题标题】:How to split complex string in VB.Net如何在 VB.Net 中拆分复杂的字符串
【发布时间】:2013-09-17 16:33:35
【问题描述】:

我有一个来自 Javascript 函数调用的参数字符串

ITQPopup('100',255,'2932 NTYwNDUwMTA0MDYzMDM);3094 V0FZ','-1909432577',0,0)

如你所见,这个代码很糟糕,传递了 6 个参数

'100'
255
'2932 NTYwNDUwMTA0MDYzMDM);3094 V0FZ'
'-1909432577'
0 
0

我会用“,”(逗号)分割字符串,但我担心第三个参数中可能有逗号。如何拆分这个字符串?

【问题讨论】:

    标签: .net vb.net string split


    【解决方案1】:

    您可以使用 RegEx 轻松完成此操作。例如:

    Dim input As String = "ITQPopup('100',255,'2932 NTYwNDUwMTA0MDYzMDM);3094 V0FZ','-1909432577',0,0)"
    Dim pattern As String = "ITQPopup\('(.*?)',(.*?),'(.*?)','(.*?)',(.*?),(.*?)\)"
    Dim m As Match = Regex.Match(input, pattern)
    If m.Success Then
        Dim param1 As String = m.Groups(1).Value
        Dim param2 As String = m.Groups(2).Value
        Dim param3 As String = m.Groups(3).Value
        Dim param4 As String = m.Groups(4).Value
        Dim param5 As String = m.Groups(5).Value
        Dim param6 As String = m.Groups(6).Value
    End If
    

    如有必要,您可以进一步改进模式,以允许参数之间的空白等。但这是最简单的工作示例。

    【讨论】:

    • 我创建了这个 RegEx 模式 \('([0-9]*?)',([0-9]*?),'(.*?)','(-[0-9]*?)',([0-9]*?),([0-9]*?)\) 这是更具体的吗?
    • 是的,这样更好。它仍然不处理参数之间的空格,但它将数字限制为数字。您可以使用\d 而不是[0-9]。您可能还希望在每个数字参数上允许一个可选的负号。例如:(-?\d*?)。此外,在分组中包含负号也会很有帮助。
    • 我看到的唯一空格是在第三个参数中,但 . 应该匹配所有正确的吗?
    • 是的。 . 将匹配空格。我只是说如果参数之间有空格,则该模式将不起作用,例如:'100', 255, "
    • 由于某种原因,\('(-?\d*?)'.*?,.*?(-?\d*?).*?,.*?'(.*?)'.*?,.*?'(-?\d*?)'.*?,.*?(-?\d*?).*?,.*‌​?(-?\d*?)\) 与 255 和第一个 0 不匹配,有什么想法吗? (通过从每个组的末尾取出.*? 来解决...)如果有空格,可能会在参数的开头对吗?
    【解决方案2】:

    去掉括号的内容,用方括号括起来,用JSON库解析成数组。

    【讨论】:

    • 我相信这也是一个很好的方法,但我更喜欢正则表达式(因为我的项目的其余部分经常使用它)所以我不必引用其他任何东西作为依赖。谢谢卡雷尔
    【解决方案3】:

    您可以使用拆分。

    然后要检索您的参数,您只需将列表的前 2 个元素作为您的第一个 2 参数。

    然后对最后 3 个参数执行相同操作。

    然后所有剩余的可以连接起来给你的第三个参数。

    【讨论】:

    • 我想过这个问题,但我想要一个更简单的答案,要么是正则表达式,要么是实现此目的的其他形式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多