0

我正在尝试使用对象匹配通过正则表达式定义的组来拆分字符串,如下所示:

if(match.Success)
{
    foreach (Group group in match.Groups)
    {
        foreach(Capture capture in group.Captures)
        {
            //...
        }
    }
}

我应该匹配的字符串是这样形成的:以“开头或不以”,任何字符任意次数(包括“,\r,\n等),如果以“结束”开头,后跟; 然后任意字符任意数量的时间,另一个;,至少完成一次空间和数字的混合。

我使用这个正则表达式:

("?[.|\n|\r|\r\n]*"?);(.*);([\d| ]*)(;([\d| ]*))*

我想要第一组是带有任何字符的字符串,第二组:字符串,它只是文本/数字,第三组总是在这里,是空格和数字的混合,如果有更多组空格和数字,将它们放入 4,5 6 等组中。

我必须匹配的字符串示例:

“VIS METAUX TETE CYLINDRIQUE FENDUE EN ACIER ZINGUE DIAMETRE M10”;长 60 毫米;0046 10 30

“Vis à métaux à tête cylindrique fendue。标准:DIN 84”;直径 3 毫米。长 16 毫米;0046 3 16

"Tournevis Torx sur monture : 10, 15, 20, 25, 30, 40";;0613 434 10;0613 434 10;0613 434 20

这根本不起作用,我匹配的组很少好,我不明白我怎么能做到这一点。

4

1 回答 1

1

这仅在您可以将每个“行”作为单独的字符串获取时才有效,而不是尝试拆分,我会使用正则表达式来匹配每个字段:

// Unescaped regular expression is (?<=")[^"]*(?=")|(?<=^|;)[^;]*(?=$|;)
Regex r = new Regex(@"(?<="")[^""]*(?="")|(?<=^|;)[^;]*(?=$|;)");
foreach (Match field in r.Matches(csvLine))
   ... // do something with field.Value

正则表达式匹配“在它之前和之后带有引号的非引号字符的负载或带有分号的非分号字符的负载或字符串的开头/结尾在它之前和之后)

于 2012-12-05T14:42:25.873 回答