以下正则表达式模式如何工作?

时间:2010-03-18 13:47:24

标签: .net regex

我对正则表达式很恐怖,但我想弄清楚导入函数是如何工作的,我遇到了这个正则表达式模式。也许你们中的一个可以帮助我理解它是如何运作的。

string pattern = @"^""(?<code>.*)"",""(?<last_name>.*)"",""(?<first_name>.*)"",""(?<address>.*)"",""(?<city>.*)"",""(?<state>.*)"",""(?<zip>.*)""$";
Regex re = new Regex(pattern);
Match ma = re.Match(_sReader.ReadLine().Trim());

由于

3 个答案:

答案 0 :(得分:2)

看起来它正在尝试将逗号分隔的字符串(带有引号的字段)拆分为带有命名组的单独字段。 (?<name>...)语法将字段捕获到命名组中。 ^表示匹配必须从字符串的开头开始,$是字符串锚点的结束。每个组中的.*表示捕获双引号之间发生的所有内容(任何字符,零次或多次)。

基本上,它应该将输入CSV字符串解析为可以按组名称引用的字符串数组。您可以使用ma.Groups[x]引用捕获的组,其中x是整数,或者您可以使用组名称。例如,ma.Groups["code"]

答案 1 :(得分:1)

我读它的方式。它是一个平面文件记录解析器 在这种情况下,它是一个带引号的csv。

它会让你成为字段的字典。这样您就可以更轻松地使用csv记录了。

不必在此之后知道第4个字段是代码中的地址,而只需引用,分组[“address”]并获取第4个字段。

有更多直接和通用的方法可以做到这一点。如果hte文件分隔不当或者在hte文件末尾缺少引号,那么这个正则表达式将会非常脆弱。

答案 2 :(得分:0)

分而治之!最适合regex

    string pattern = @"^""(?<last_name>.*)"",""(?<first_name>.*)""";

    Regex re = new Regex(pattern);

    //  INPUT: make sure you input it with " double inverted commas
    //  "("bond","james")"
    Match mm = re.Match(Console.ReadLine().Trim()); 

    Console.WriteLine("Last Name:"+mm.Groups["last_name"]);
    Console.WriteLine("First Name:"+mm.Groups["first_name"]);

输出:

 Last Name:("bond
 First Name:james")