0

ファイルを開いて必要な行を見つけていますが、見つかった文字列から変数を作成するのに問題があります

70c 08:04:04.014    rexx    TRACE   2203 8=4.4|9=892|35=J|49=ICE_SM_S|56=SM|34=280|70=0241608914160889|71=0|626=2|793=16|72=|466=1164266784|857=0|73=1|11=|37=1156426784|526=1156426674|38=1|198=1310883PTM|54=1|6=117.2100000000|336=R|625=P|55=B|461=FXXXXX|200=20120901|207=IFEU|53=1|30=ICE|453=2|448=SLM|447=C|452=7|448=FFC|447=C|452=12|75=20120210|60=20120310-09:04:04|77=O|58=CYU795|232=14|233=GL_TRADEJOBOUT|234=N|233=GL_ORDERJOBOUT|234=N|233=GL_TAKEN|234=0|233=GL_TRADETYPE|234=E|

これは文字列であり、それを の変数に割り当てたいtag198ので、次のようになります。

tag198 = '1310883PTMS'

以降|は必要ありません。

tag198 = line.match(/198=(.*)/)[1]
puts tag198

しかし、それはその後すべてを保持し198ます。の前の文字列だけが必要です|

4

3 に答える 3

3

正規表現を次のように変更します。

/198=(.+?)\|/

これにより、貪欲ではなくなり、垂直バーで停止します。通常、正規表現では「OR」を意味するため、垂直バーをエスケープする必要があります。

于 2012-04-08T20:45:17.750 に答える
1

あなたの正規表現*は貪欲で、残りの式の一致を止めることなく、可能な限りすべての文字を消費します。文字の収集をいつ停止するかを ruby​​ に伝える式には何もありません。

regular-expressions.infoを見てください。問題の部分的な修正は、「|」を置くことです キャプチャ後:

tag198=line.match(/198=(.*)\|/)[1] puts tag198

「|」それ以外の場合は正規表現で特別な意味を持つため、エスケープされます。*ただし、まだ '|' を消費できるため、これはまだ機能しません。'|' に一致する文字を 1 つ残す限り、私たちの表現で。完全に修正するには、 が*パイプをキャプチャしないようにします。

tag198 = line.match(/198=([^|]*)\|/)[1] puts tag198

この変更の結果については、こちらをご覧ください

于 2012-04-08T20:44:34.893 に答える
0

使用できる文字と数字のみの場合

    /198=([A-Za-z0-9]*)/ 

また、わからない場合は、rubular.com で正規表現をテストできます。また、正規表現の特別なチャーターに関する情報も提供されています。ルビー。

于 2012-04-10T22:16:10.583 に答える