我有类似的问题,以前提出的问题。但类似的做法显然不会产生类似的结果。正则表达式语法
新的问题 - 我想匹配T中开始的第一场比赛的线路,并以X为第二场比赛开始以下行(整个字符串,通过另一个正则表达式在后面匹配)
我到目前为止是(^T(\d+)\n(.*?)(?:the_problem)/m)
我不知道用什么来代替“the_problem”,或者即使是这个问题。我假设了一些引用(?:\n|\z)
,但显然不是。我所尝试过的所有内容都不会将下一次出现的^T(\d+)
作为新组的开始,并且同时继续捕获每个事件之间的所有行。
Sample text;
T01C0.025
T02C0.035
T03C0.055
T04C0.150
T05C0.065
T06C0.075
%
G05
G90
T01
X011200Y004700
X011200Y009700
X018500Y011200
X013500Y-011200
X023800Y019500
T02
X034800Y017800
X-033800Y-017800
X032800Y017800
T03
X036730Y003000
X038700Y003000
X040668Y-003000
X059230Y003000
T04
X110580Y017800
X023800Y027300
X095500Y028500
X005500Y-006500
X021500Y-006500
T05
X003950Y002000
X003950Y004500
X003950Y007000
T06
X026300Y027300
M30
我只是想捕捉T01,T02的短版,... T开,而不是在顶部的更长的版本,那么^X(-?\d+)Y(-?\d+)
整个集合遵循它,因为另一场比赛。
Result 1.
Match 1. T01
Match 2. X011200Y004700
X011200Y009700
X018500Y011200
X013500Y-011200
X023800Y019500
Result 2.
Match 1. T02
Match 2. X034800Y017800
X-033800Y-017800
X032800Y017800
Result 3.
Match 1. T03
Match 2. X036730Y003000
X038700Y003000
....etc....
在此先感谢您的帮助;-)注意:我更喜欢使用原始的Ruby,没有扩展名或插件。我的红宝石版本是1.8.6。
一览(不可缺少的开发正则表达式工具),它看起来像你应该只写的,而不是试图塞进一切小,行由行分析器成正则表达式。 – 2011-06-01 21:23:20
这可能会在将来发生,但我使用几个不同的文件来获取信息,并且正则表达式还没有让我失望 - 在这里既没有美妙的伙计;-) – tahwos 2011-06-01 23:56:59