簡體   English   中英

在正則表達式中獲取第六條匹配行

[英]Get the sixth matching line in regex

GeraLinha('1', '            860,96 ', 1'18/11/2010', '0237.02912.1999.0022512 ');
GeraLinha('1', '          1.858,60 ', '17/11/2010', '0237.02911.1999.0033109 ');
GeraLinha('1', '            397,76 ', '17/11/2010', '0237.02911.1999.0032989 ');
GeraLinha('1', '            300,62 ', '17/11/2010', '0237.02911.1999.0032898 ');
GeraLinha('1', '            915,95 ', '12/11/2010', '0422.02896.1999.0000277 ');
GeraLinha('1', '            549,30 ', '18/11/2010', '0237.02912.1999.0059833 ');
GeraLinha('1', '            861,88 ', '24/11/2010', '0237.02916.1999.0000134 ');
GeraLinha('1', '            936,62 ', '19/11/2010', '0356.02703.1999.0072998 ');
GeraLinha('1', '            384,15 ', '18/11/2010', '0033.02907.1999.0004992 ');
GeraLinha('1', '            958,82 ', '17/11/2010', '0237.02911.1999.0032926 ');
GeraLinha('1', '            766,86 ', '22/11/2010', '0341.02922.1999.0000166 ');
GeraLinha('1', '            300,26 ', '17/11/2010', '0237.02911.1999.0033505 ');

我正在使用以下正則表達式來匹配該組,但我只想要第六行。 是否可以在正則表達式中定義“我想要第六場比賽”? 如果這是根本不可能 ,是有其他的方式來達到預期的效果?

http://regexr.com/3cas9

如您在這里看到的,我正在全部匹配。

/GeraLinha\((.*)\);/g

您可以匹配以GeraLinha(開頭的5行,然后匹配並捕獲第6行:

(?:GeraLinha\(.*\r?\n){5}(GeraLinha\(.*)

正則表達式演示

這里, (?:GeraLinha\\(.*\\r?\\n){5}子模式由於{5} 限制量詞而與5行匹配。然后,我們匹配並捕獲了下一行,即第六行。

 var re = /(?:GeraLinha.*\\r?\\n){5}(GeraLinha.*)/; var str = 'GeraLinha(\\'1\\', \\' 860,96 \\', 1\\'18/11/2010\\', \\'0237.02912.1999.0022512 \\');\\nGeraLinha(\\'1\\', \\' 1.858,60 \\', \\'17/11/2010\\', \\'0237.02911.1999.0033109 \\');\\nGeraLinha(\\'1\\', \\' 397,76 \\', \\'17/11/2010\\', \\'0237.02911.1999.0032989 \\');\\nGeraLinha(\\'1\\', \\' 300,62 \\', \\'17/11/2010\\', \\'0237.02911.1999.0032898 \\');\\nGeraLinha(\\'1\\', \\' 915,95 \\', \\'12/11/2010\\', \\'0422.02896.1999.0000277 \\');\\nGeraLinha(\\'1\\', \\' 549,30 \\', \\'18/11/2010\\', \\'0237.02912.1999.0059833 \\');\\nGeraLinha(\\'1\\', \\' 861,88 \\', \\'24/11/2010\\', \\'0237.02916.1999.0000134 \\');\\nGeraLinha(\\'1\\', \\' 936,62 \\', \\'19/11/2010\\', \\'0356.02703.1999.0072998 \\');\\nGeraLinha(\\'1\\', \\' 384,15 \\', \\'18/11/2010\\', \\'0033.02907.1999.0004992 \\');\\nGeraLinha(\\'1\\', \\' 958,82 \\', \\'17/11/2010\\', \\'0237.02911.1999.0032926 \\');\\nGeraLinha(\\'1\\', \\' 766,86 \\', \\'22/11/2010\\', \\'0341.02922.1999.0000166 \\');\\nGeraLinha(\\'1\\', \\' 300,26 \\', \\'17/11/2010\\', \\'0237.02911.1999.0033505 \\');'; var m = str.match(re); if (m !== null) { document.write(m[1]); } 

如果您可以考慮使用幾乎非正則表達式的方法,則可以拆分行並僅獲得帶有索引5的行(我正在使用/\\r?\\n+/正則表達式來匹配換行符以支持Unix和Windows OS換行符樣式) :

 var str = 'GeraLinha(\\'1\\', \\' 860,96 \\', 1\\'18/11/2010\\', \\'0237.02912.1999.0022512 \\');\\nGeraLinha(\\'1\\', \\' 1.858,60 \\', \\'17/11/2010\\', \\'0237.02911.1999.0033109 \\');\\nGeraLinha(\\'1\\', \\' 397,76 \\', \\'17/11/2010\\', \\'0237.02911.1999.0032989 \\');\\nGeraLinha(\\'1\\', \\' 300,62 \\', \\'17/11/2010\\', \\'0237.02911.1999.0032898 \\');\\nGeraLinha(\\'1\\', \\' 915,95 \\', \\'12/11/2010\\', \\'0422.02896.1999.0000277 \\');\\nGeraLinha(\\'1\\', \\' 549,30 \\', \\'18/11/2010\\', \\'0237.02912.1999.0059833 \\');\\nGeraLinha(\\'1\\', \\' 861,88 \\', \\'24/11/2010\\', \\'0237.02916.1999.0000134 \\');\\nGeraLinha(\\'1\\', \\' 936,62 \\', \\'19/11/2010\\', \\'0356.02703.1999.0072998 \\');\\nGeraLinha(\\'1\\', \\' 384,15 \\', \\'18/11/2010\\', \\'0033.02907.1999.0004992 \\');\\nGeraLinha(\\'1\\', \\' 958,82 \\', \\'17/11/2010\\', \\'0237.02911.1999.0032926 \\');\\nGeraLinha(\\'1\\', \\' 766,86 \\', \\'22/11/2010\\', \\'0341.02922.1999.0000166 \\');\\nGeraLinha(\\'1\\', \\' 300,26 \\', \\'17/11/2010\\', \\'0237.02911.1999.0033505 \\');'; var lines = str.split(/\\r?\\n+/); if (lines !== null && lines.length>5) { document.write(lines[5]); } 

只需一次匹配所有6行。
第六行內容(使用正則表達式)在捕獲組1中。

之所以有效,是因為量化組{6}每次迭代
捕獲緩沖區1被覆蓋,僅保留第6行數據。

對於連續線:

text.match(/(?:^GeraLinha\\((.*)\\);\\s*){6}/m);

對於非連續線:

text.match(/(?:^GeraLinha\\((.*)\\);\\s*(?:(?!^GeraLinha\\(.*\\);\\s*)^.*\\s*)*){6}/m);

格式:

 (?:
      ^ GeraLinha\(
      ( .* )                        # (1)
      \); \s* 
      (?:
           (?! ^ GeraLinha\( .* \); \s* )
           ^ .* \s* 
      )*
 ){6}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM