首页 > 解决方案 > 在正则表达式中捕获未定义数量的项目

问题描述

我想捕获以下数据:

[趋势, 约翰, DATA1, 0.17, 33.34, 26, 33.33, 0.25, 33.33, DATA2, 0.26, 20.0, 261, 20.0, 0.234, 20.0, 0.1, 20.0, 5, 20.0, FINAL, 245]

从以下文字:

Market

#TREND

Person: JOHN

DATA1
1) 0.17 (33.34%) 
2) 26 (33.33%)      
3) 0.25 (33.33%)  
* random text here

DATA2
1) 0.26 (20.0%) 
2) 261 (20.0%) 
3) 0.234 (20.0%) 
4) 0.1 (20.0%) 
5) 5 (20.0%) 
* qsdfdsf random dsfg text random here

FINAL
245

Signature

我编写了以下正则表达式代码,可在此精确示例中正常工作:

#(TREND)\n+\w*:\s*(JOHN)\n+(DATA1)\n\d\S\s(\d+.?\d*)\s\((\d+.?\d*)%\)\s*\n\d\S\s(\d+.?\d*)\s\((\d+.?\d*)%\)\s*\n\d\S\s(\d+.?\d*)\s\((\d+.?\d*)%\)\s*\n.*\n*(DATA2)\n\d\S\s(\d+.?\d*)\s\((\d+.?\d*)%\)\s*\n\d\S\s(\d+.?\d*)\s\((\d+.?\d*)%\)\s*\n\d\S\s(\d+.?\d*)\s\((\d+.?\d*)%\)\s*\n\d\S\s(\d+.?\d*)\s\((\d+.?\d*)%\)\s*\n\d\S\s(\d+.?\d*)\s\((\d+.?\d*)%\)\s*\n.*\n*(FINAL)\n(\d+)    

我想让 DATA1 和 DATA2 的随机项目数从 1 到 10 项进行扩展:

Market

#TREND

Person: JOHN

DATA1
1) 0.17 (33.34%) 
2) 26 (33.33%)      
3) 0.25 (33.33%) 
4) 0.11 (40.40%)
5) 0.222 (50.50%) 
* random text here

DATA2
1) 0.26 (20.0%) 
2) 261 (20.0%) 
3) 0.234 (20.0%) 
* qsdfdsf random dsfg text random here

FINAL
245

Signature

标签: regex

解决方案


推荐阅读