3

この正規表現を機能させることができないようです。

入力は次のとおりです。実際には 1 行ですが、各 \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 つの一致が必要です。私の問題は、先を見越して新しい試合の開始 (次の 2 つの日付) を一致させる方法がわかりませんが、それらの日付を最初の試合に含めないことです。それらは 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 で列を簡単に区切ることができます。

4

4 に答える 4

3

このより明確なパターンはあなたに役立つでしょうか?

(\d{2}-\d{2})\r\n(\d{2}-\d{2})\r\n(.*)\r\n(.*)\r\n(\d+(?:,?\d+))
于 2011-02-04T23:40:46.270 に答える
2

試してみる別のオプションは次のとおりです。

(.+?)(?=\d{2}-\d{2}\\r\\n\d{2}-\d{2}|$)

紅斑

于 2011-02-04T23:43:19.530 に答える
1
/
   \G
   (
      (?:
         [0-9]{2}-[0-9]{2}\r\n
      ){2}
      (?:
         (?! [0-9]{2}-[0-9]{2}\r\n ) [^\n]*\n
      )*
   )
/xg
于 2011-02-04T23:44:30.430 に答える
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`
于 2011-02-05T00:22:21.037 に答える