一般问题:
我有很多数据我试图清理然后解析。每条线都很长,但它们都具有相同的结构。它从一个唯一的子字符串开始,后跟第二个唯一的子字符串,后跟一个重复约20次的子字符串。
所以它是:String A,String B,String C,String C,String C等。每一行都是那种格式。
字符串A的开头是一个ID,只是一个唯一的六位数字。我试图在字符串B的开头和所有的字符串C中插入该ID。
字符串C是问题所在。我可以为ID,B和C中的每一个编写正则表达式,但是尝试将捕获的ID插入到所有C中失败。它只适用于最后一个。这实际上是正确的行为,但我非常确定有一种方法可以处理字符串C,这样它就像子字符串的每个实例都是分开的。正则表达式一次又一次地运行它。
我尝试使用' \ G'语法,但我似乎无法使其工作。
所以这是一个使用一些大量删节的样本数据的具体例子:
[' sample_id':121084,[122'西南',7.23,[[[' station_01' [1]],[&#39 ; station_02',[1]],[' station_03',[22]],[' station_04',[49]],[' station_05' [1]],[' station_06' [4]],[' station_07',[101]],[' station_08' [22],] ]],[[['运行':133225,'标记':' SAM',[[[' substation_01' [1] ],[' substation_02' [3]],[' substation_03' [16]],[' substation_04' [15]],[&# 39; substation_05' [14]],[' substation_06' [6]],[' substation_07' [41]],[' substation_08&#39 ; [19]],[' substation_09' [13]],[' substation_10' [1]],[' substation_11' [13] ],[' substation_12' [1]]]],' TK',22,34,127],['运行':608049,'标记物#39;:' TIM',[[[' substation_01' [12]],[' substation_02' [6]],[' substation_03' [17]],[' substation_04' [11]],[' substation_05' [1]],[' substation_06&#39 ;, [6]],[' substation_07&#3 9; [5]],[' substation_08' [19]]]],' TM',21,21,966],['运行':445801 '标记':' RON',[[[' substation_01' [5]],[' substation_02' [5]] [' substation_03' [6]],[' substation_04' [11]],[' substation_05' [1]],[&#39 ; substation_06' [15]],[' substation_07' [11]],[' substation_08' [16]],[' substation_09' [1]],[' substation_10' [13]],[' substation_11' [3]]]],' TR',12,33,521 ],['运行':142278等...
注意:字符串B和所有字符串C之间的唯一区别是括号的数量,但是一旦我开始解析它,它实际上很有用(最终它都是JSON)。
我想要得到的是:
[' sample_id':121084,[122'西南',7.23,[[[' station_01' [1]],[&#39 ; station_02' [1]],[' station_03' [22],],[' station_04' [49]],[' station_05' [1]],[' station_06' [4]],[' station_07',[101]],[' station_08' [22],] ]],[[[' sample_id':121084日'运行':133225,'标记':' SAM&# 39;,[[[' substation_01' [1]],[' substation_02' [3]],[' substation_03' [16]], [' substation_04' [15]],[' substation_05' [14]],[' substation_06' [6]],[' substation_07' [41]],[' substation_08' [19]],[' substation_09' [13]],[' substation_10&#39 ;, [1]],[' substation_11' [13]],[' substation_12' [1]]]],' TK',22,34,127] [' sample_id':121084日'运行':608049,'标记':' TIM' [ [[' substation_01' [12]],[' substation_02' [6]],[' substation_03' [17]],[&#39 ; substation_04' [11]],[' substation_0 5' [1]],[' substation_06' [6]],[' substation_07' [5]],[' substation_08&#39 ;, [19]]],' TM',21,21,966],[' sample_id':121084日'运行':445801, '标记':' RON',[[[' substation_01' [5]],[' substation_02' [5]] [' substation_03' [6]],[' substation_04' [11]],[' substation_05' [1]],[' substation_06' [15]],[' substation_07' [11]],[' substation_08' [16]],[' substation_09&#39 ;, [1]],[' substation_10' [13]],[' substation_11' [3]]],' TR',12,33,521] [' sample_id':121084,等......
在后一个文本块中,每个子字符串现在都以ID' sample_id':121084开头(我加粗了它,以便更容易看到正在进行的操作)。
这是通过String C获得我的正则表达式。
\[('sample_id':\d{6},)(?:.+\]\]\],\[\[)\[(.+?\d\],)\[(.+?\d\],)
所以我试图将第一个捕获组($ 1)插入第二组,然后第三组一遍又一遍(约20x)。如果我重复最后一点,我最终会杀死除了一条C弦之外的其他所有C弦,我相信它仍然是“正确的”#C;行为。我试图弄清楚如何解决这个问题。
我知道这是一团糟。但是每一行都只有一行,而且我在博士之后得到的文档中有100条这样的行。因此,一个没有分解线的正则表达式似乎是最好的。
我在这个页面上试了几次试图设计一个解决方案,但是再一次,我无法使\ G语法在这里工作。
Collapse and Capture a Repeating Pattern in a Single Regex Expression
应该提及我尝试在Sublime Text 2中执行此操作。感谢您的帮助。