关于组拆分的正则表达式问题

时间:2012-12-05 14:21:24

标签: c# regex split string-matching

我正在尝试使用像这样的对象匹配通过正则表达式分组的字符串:

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

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

我正在使用这个正则表达式:

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

我希望第一组是一个包含任何字符的字符串,第二组:字符串只是文本/数字,第三组总是在这里,是空格和数字的混合,如果有的话更多的空格和数字组,让他们进入组4,5 6等。

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

  

“VIS METAUX TETE CYLINDRIQUE FENDUE EN ACIER ZINGUE DIAMETRE   M10“; Longueur 60mm; 0046 10 30

     

“Visàmétauxàtêtecyclindriquefendue.Norme:   DIN 84“;Diamètre3mm.Longueur 16 mm; 0046 3 16

     

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

这根本不起作用,我匹配的组很少好,我不知道我怎么做。

1 个答案:

答案 0 :(得分:1)

这只有在你可以将每个“行”作为一个单独的字符串,但不是试图分割时,我才会使用正则表达式匹配每个字段:

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

正则表达式匹配“非引号字符加载前后的引号或加载非分号字符的分号或字符串前后的字符串的开头/结尾”