0

正規表現を使用してテキストファイルの2つの部分を分割する際に問題が発生しました。基本的にはクラス名が表示されますが、部屋番号はその後ろに空白が1つ表示されます。私は部屋の名前を保証されていません、さもなければ私はそれで分割するでしょう。

説明のために、これは完全にうまく分割されます。

WEB SITE DEVELOPMENT II     NKM 104

空白のために分割されるので、私のstring[]配列では次のようになります。

0 - WEB SITE DEVELOPMENT II
1 - KNM 104

それが私に必要なものです。問題は、次のようなエントリにあります。

PERSONAL COMPUTER APPLICATI NKM 106
PORTFOLIO DES & PROF PRACTI LCN 104

これは次のように表示されます:

0 - PERSONAL COMPUTER APPLICATI NKM 104
1 - PORTFOLIO DES & PROF PRACTI LCN 104

必要な場合:

0 - PERSONAL COMPUTER APPLICATI
1 - KNM 104
2 - PORTFOLIO DES & PROF PRACTI 
3 - LCN 104

このような状況で正規表現をどこから始めればよいかについてのアイデアはありますか?部屋番号は常に「XYZ012」形式であることが保証されていますが、問題はクラス名の後にあることです。以前は、簡単にそれを分割することができました。どんな助けでも大歓迎です。

4

3 に答える 3

2

例のさまざまなテキストがすべて同じ長さで切り捨てられているという事実は、テキスト ファイルが固定幅であり、正規表現を必要としないのではないかと疑っています。FileHelpersプロジェクトは、固定幅のテキストを解析します。

ただし、幅がすべてのファイルで常に同じである場合は、 のような式で部分文字列を抽出するだけですstring field = inputLine.Substring(startcolumn, columnLength)

于 2013-02-27T17:46:37.503 に答える
2

ここで正規表現は必要ありません...

var firstPart = line.Substring(0, line.Length - 8);
var lastPart = line.Substring(line.Length - 7);

...そして完全な例:

var data = lines.Split(new[] {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
                .SelectMany(line => new[] {line.Substring(0, line.Length - 8), line.Substring(line.Length - 7)})
                .Select((part, i) => string.Format("{0} - {1}", i, part));

var asString = string.Join(Environment.NewLine, data);
于 2013-02-27T17:39:32.850 に答える
0

これが私が使用する正規表現オプションです(一度に1行ずつ読んでいると仮定します:

Regex regexObj = new Regex(@"^(.+)\s(\w+\s[0-9]{3})$");

キャプチャ グループからアクセスできます。最初のキャプチャ グループは文字列の最初の部分を取得し、2 番目は部屋番号と建物 (?) を取得します。

仮定:

  • 部屋番号は列の最後です
  • このテキスト ファイルを 1 行ずつ読んでいるので、文字列と照合する場合、エントリは 1 つしかありません。
于 2013-02-27T17:47:15.883 に答える