我似乎无法使这个正则表达式工作。
输入如下。它真的在一行但我在每个\ r \ n之后插入换行符,以便更容易看到,所以不需要检查空格字符。
01-03\r\n
01-04\r\n
TEXTONE\r\n
STOCKHOLM\r\n
350,00\r\n ---- 350,00 should be the last value in the first match
12-29\r\n
01-03\r\n
TEXTTWO\r\n
COPENHAGEN\r\n
10,80\r\n
这可以继续另外01-31和02-01,标志着另一场新比赛(这些是日期)。
我想为此输入共有2个匹配项。 我的问题是我无法弄清楚如何向前看并匹配新比赛的开始(两个跟随日期),但不包括第一场比赛中的那些日期。他们应该属于第二场比赛。
这很难解释,但我希望有人会帮助我。 这是我到目前为止所得到的,但它甚至不是很接近:
(.*?)((?<=\\d{2}-\\d{2}))
我想要的比赛是:
1: 01-03\r\n01-04\r\nTEXTONE\r\nSTOCKHOLM\r\n350,00\r\n
2: 12-29\r\n01-03\r\nTEXTTWO\r\nCOPENHAGEN\r\n10,80\r\n
之后,我可以轻松地将列与\ r \ n。
分开答案 0 :(得分:3)
这种更明确的模式可以为你服务吗?
(\d{2}-\d{2})\r\n(\d{2}-\d{2})\r\n(.*)\r\n(.*)\r\n(\d+(?:,?\d+))
答案 1 :(得分:2)
答案 2 :(得分:1)
/
\G
(
(?:
[0-9]{2}-[0-9]{2}\r\n
){2}
(?:
(?! [0-9]{2}-[0-9]{2}\r\n ) [^\n]*\n
)*
)
/xg
答案 3 :(得分:0)
为什么这么多工作?
$string = q(01-03\r\n01-04\r\nTEXTONE\r\nSTOCKHOLM\r\n350,00\r\n12-29\r\n01-03\r\nTEXTTWO\r\nCOPENHAGEN\r\n10,80\r\n);
for (split /(?=(?:\d{2}-\d{2}\\r\\n){2})/, $string) {
print join( "\t", split /\\r\\n/), "\n"
}
输出:
01-03 01-04 TEXTONE STOCKHOLM 350,00
12-29 01-03 TEXTTWO COPENHAGEN 10,80`