我的源数据文本如下所示:
a1,a2,a3
a4,a5,a6
a7,a8,a9
test="1"
b1,b2,b3
b4,b5,b6
b7,b8,b9
test="2"
c1,c2,c3
c4,c5,c6
c7,c8,c9
test="3"
我需要对其进行解析,以便最终结果如下所示(每行中包含适当的“测试”字段):
a1,a2,a3,1
a4,a5,a6,1
a7,a8,a9,1
b1,b2,b3,2
b4,b5,b6,2
b7,b8,b9,2
c1,c2,c3,3
c4,c5,c6,3
c7,c8,c9,3
...etc
这是我开始并正确捕获字段的内容:
(?<f1>.*?),(?<f2>.*?),(?<f3>.*?)\s+
我知道我需要使用环视来捕获并包含每行的“测试”字段。
所以添加了这样的东西(使用积极的前瞻)......</p>
(?<f1>.*?),(?<f2>.*?),(?<f3>.*?)\s+(?=test="(?<test>.*?)")
这似乎很接近,但并未产生所有数据行,而是仅产生包含测试值的最后一行数据,就好像它正在消耗前瞻行一样。
将该表达式及其捕获的组输入到 .NET 应用程序中,该应用程序将这些捕获的组作为字段插入到数据库表中。字段数始终是静态的(上例中为 4;field1=f1,field2=f2,field3=f3,field4=test),但记录数是可变的。
任何指导将不胜感激。