【问题标题】:How to convert this PHP RegEx match pattern to .Net如何将此 PHP RegEx 匹配模式转换为 .Net
【发布时间】:2012-02-08 07:16:17
【问题描述】:

这是一个非常复杂的正则表达式,它从专有的数据字符串中返回一组键/值对。这是数据的示例,以防express在.Net中无法使用而需要使用其他方法。

0,"101"1,"12345"11,"ABC Company"12,"John Doe"13,"123 Main St"14,""15,"Malvern"16,"PA"17,"19355"19,"UPS"21,"10"22,"GND"23,""24,"082310"25,""26,"0.00"29,"1Z1235550300000645"30," PA 193 9-05"34,"6.55"37,"6.55"38,"8.05"65,"1Z1235550300000645"77,"10"96,""97,""98

如果你仔细看,你会看到它的key,"value",key,"value" 格式化的唯一保证是每个键值对用逗号分隔,每个值将总是用双引号括起来。主要问题(你不能把它炸开的原因)是以前的编码器选择了错误的选择来分隔与条目具有相同字符的键和值。无论如何,不​​在我的手中。这是一个有效的 PHP 示例。

    function parseResponse($response) {
    // split response into $key, $value pieces
    preg_match_all("/(.*?),\"(.*?)\"/", $response, $m);

    // loop through pieces and format
    foreach($m[1] as $index => $key) {
            $value = $m[2][$index]
                echo $key . ":" . $value;
        // this will output KEY:VALUE for each entry in the string
            }
    }

可以看到/(.*?),\"(.*?)\"/这个表达式

这是我在 VB .Net 中所拥有的

Imports System.Text.RegularExpressions
Public Class Parser
    Private Sub parseResponse(ByVal response As String)
        Dim regExMatch As Match = Regex.Match(response, "/(.*?),\""(.*?)\""/")

    End Sub
End Class

【问题讨论】:

    标签: php .net regex vb.net


    【解决方案1】:

    您需要删除 PHP 分隔符:

    Dim RegexObj As New Regex("(.*?),""(.*?)""")
    

    此外,最好更具体地说明可以匹配的内容(使正则表达式更加高效):

    Dim RegexObj As New Regex("([^,]*),""([^""]*)""")
    

    现在第一组只匹配非逗号字符,第二组只匹配非引号字符。顺便说一句,如果您要在数据中转义引号,这两个正则表达式都会失败。

    要获取字符串中的所有匹配项,请使用

    AllMatchResults = RegexObj.Matches(response)
    

    【讨论】:

    • 这它不能正常工作,它似乎只返回第一个项目,我尝试了一个 for/each 没有运气。我需要像 php 示例中那样一次处理一个键/值对。
    • @MikeL.:您需要.Matches() 方法,而不是.Match()
    • 谢谢!我们同时想通了... For Each m As Match In Matches
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 2022-10-17
    • 2018-05-29
    相关资源
    最近更新 更多