1

データシートを解析しようとしているときに正規表現を学んでいますが、これを行う簡単な方法はないと思います (正規表現では、C# では確かに!)。次の行を含むファイルがあるとします。

0000AA  One Token    -  Value
0000AA  Another Token-  Another Value
0000AA  YA Token     -  Yet Another
0000AA  Yes, Another -  Even More
0000AA
0000AA  ______________________________________________________________________
0000AA  This line - while it will match the regex, shouldn't.

したがって、簡単な複数行の正規表現があります。 ^\s*[A-Z]{2}[0-9]{4}\s\s*(?<token>.*?)\-(?<value>.*?)$ これにより、すべての「トークン」が「トークン」にロードされ、すべての値が「値」グループにロードされます。ものすごく単純!ただし、正規表現も最終行と一致し、「この行」をトークンに入れ、「その間に [...]」を値に入れます。

____基本的に、正規表現が区切り線の上の行のみに一致するようにしたいと思います。これは Regex だけで可能ですか、それとも最初に着信文字列を____区切り行の .Split() に変更する必要がありますか?

乾杯 - -
マイク。

4

2 に答える 2

1

このようなテキスト ファイルを正規表現のみで解析するのは、適切なツールを使用しているとは言えません。可能ではありますが、効率が悪く、必要以上に複雑になります。

これを行う最も効率的な方法ではないため、実際にはすべてのテキストを文字列にロードしてこの行で分割することはありません。必要に応じて各行を処理しながら、一度に 1 行ずつループでファイルを読みたいと思います。次に、この特定の行に到達したら処理を停止します。

于 2013-02-06T21:12:23.477 に答える
0

____正規表現を区切り線より上の行にのみ一致させたいのですが。これは正規表現だけで可能でしょうか?

確かにそれは可能です。先読みを追加して、次のような行が続くことを確認します。

(?=(?s).*^\w{6}[ \t]+_{4,})

これを式の最後に追加して、そのような行が続くことを確認します。例えば:

(?m)^\s*[A-Z]{2}[0-9]{4}\s\s*(?<token>.*?)\-(?<value>.*)$(?=(?s).*^\w{6}[ \t]+_{4,})

m(式にsフラグも追加されました。)

正規表現エンジンは、一致するたびに文字列の大部分をスキャンする必要があるため、これはあまり効率的ではありません。

于 2013-02-06T23:04:51.560 に答える