我对正则表达式很恐怖,但我想弄清楚导入函数是如何工作的,我遇到了这个正则表达式模式。也许你们中的一个可以帮助我理解它是如何运作的。
string pattern = @"^""(?<code>.*)"",""(?<last_name>.*)"",""(?<first_name>.*)"",""(?<address>.*)"",""(?<city>.*)"",""(?<state>.*)"",""(?<zip>.*)""$";
Regex re = new Regex(pattern);
Match ma = re.Match(_sReader.ReadLine().Trim());
由于
答案 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")