13

複数のスペースで区切られたファイルを一致させようとしています。私が抱えている問題は、最初のフィールドに単一のスペースを含めることができることです。これを正規表現とどのように一致させることができますか?

例えば:

Name           Other Data    Other Data 2 
Bob Smith      XX1           0101010101
John Doe       XX2           0101010101
Bob Doe        XX3           0101010101
John Smith     XX4           0101010101

これらの行を正規表現で 3 つのフィールドに分割し、スペースで分割しますが、最初のフィールドで単一のスペースを許可することはできますか?

4

5 に答える 5

9

こんにちは、次の正規表現が機能するはずです

(\w*\s\w*)\s+\w{2}\d\s+\d*
于 2012-11-22T15:53:03.503 に答える
4

これはうまくいきます:

パターン:

(.*?)[ ]{2,}(.*?)[ ]{2,}(.*)

置換:

+$1+ -$2- *$3*

$1最初の列、$22 番目$3、3 番目の列が含まれています。

例: http://regexr.com?32tbt

于 2012-11-22T16:04:39.523 に答える
3

2 つ以上のスペースで分割できます。

[ ]{2,}

しかし、この正規表現のキャプチャの長さを決定するほうがよいでしょう:

(Name[ ]+)(Other Data[ ]+)

次に、行を同じ長さの部分にスライスする単純な部分文字列メソッドを使用します。

したがって、あなたの場合、最初のキャプチャは 15 文字、2 番目のキャプチャは 14 文字、列は 13 文字になります (ただし、最後のキャプチャは実際には重要ではないため、実際にはキャプチャされません)。次に、最初の 15 文字、次の 14 文字、およびすべての行とtrim各行の残りの文字を取得します (末尾の空白を削除します)。

于 2012-11-22T15:53:54.800 に答える
1

最も簡単なのは、2 つ以上のスペースに一致する正規表現を使用することだと思います。

/  +/

これは...区切り文字(/)の後にスペース()が続き、その後に別のスペースが1回以上(+ )続き、その後に終了区切り文字が続きます(/私の例では、言語固有です)。

簡単に言えば、正規表現を使用してスペースに一致させ、次に 1 つ以上のスペースを使用して文字列を分割します。

于 2012-11-22T16:10:59.153 に答える
0

通常、この種のファイルでは、必要な情報の場所に基づいて部分文字列を取得し、それをトリミングするのが最善の方法です。ファイルには 2 番目のフィールドの前に 16 文字が含まれていることがわかります。目的のテキストを含む長さ 16 の部分文字列を最初から取得できます。スペースなしで必要なテキストのみを取得するようにトリミングする必要があります。

投稿した間隔パターンが一貫している場合 (この種の異なるファイル間で変更されない場合)、別の問題もあります: 長い名前はどうなりますか?

Name           Other Data
Johnny AppleseeXX1
TutankamonfirstXX2

本当に正規表現を使用したい場合は、これらのまれなケースを避けるようにしてください。

于 2012-11-22T15:55:04.853 に答える