1

会社名とそのティッカーシンボルを別の配列で取得する必要があります。txtファイルに保存されている私のデータは次のとおりです。

3M Company      MMM
99 Cents Only Stores    NDN
AO Smith Corporation    AOS
Aaron's, Inc.   AAN

等々

正規表現やその他の手法を使用してこれを行うにはどうすればよいですか?

4

4 に答える 4

1

各行を繰り返し、正規表現を使用してデータを収集します。

^(.+?)\s+([A-Z]+)$

後方参照$1には会社名$2が含まれ、ティッカーシンボルが含まれます。

2つまたは3つのスペース区切り文字を使用して文字列を2つに分割し、結果の2つの文字列をトリミングすることもできます。これは、会社名とティッカーシンボルが常に十分なスペースで区切られ、会社名自体にその量のスペースが含まれていないことが確実な場合にのみ機能します。

于 2009-07-23T18:26:01.623 に答える
1

テキストファイルの形式はあなたに課せられていますか?選択肢がある場合は、テキストファイルのフィールドを区切るためにスペースを使用しないことをお勧めします。代わりに、|を使用してください または、$$など、コンテンツに表示されないことが保証されているものを、配列に分割するだけです。

于 2009-07-23T18:30:51.113 に答える
0

この正規表現を試してください:

(.+)\s*([A-Z]{3})$

おそらく、PHPの経験が豊富な人は、preg_splitまたは類似のものを使用してコード例を具体化することができます。

于 2009-07-23T18:24:41.627 に答える
0

テキストの2つの列の間の区切り文字として可変空白を使用すると、これを行うためのいくつかの方法があります。

テキストファイルを1行ずつ処理しfile()、使用preg_split()して可変スペースのテキストを区切り、その後に大文字のシーケンスと文字列の終わりを続けるか、を使用file_get_contents()してpreg_match_all()、キャプチャされた2つの列を次のように抽出できます。 array_column()。後者は1つの関数呼び出ししか行わないため、少し高速になるpreg_可能性がありますが、決定は開発者のコ​​ーディングの好みと入力テキストの複雑さに帰着する可能性があります。

コード:(デモ

//$lines = file('your_text_file.txt', FILE_IGNORE_NEW_LINES);
$lines = [
    '3M Company      MMM',
    '99 Cents Only Stores    NDN',
    'AO Smith Corporation    AOS',
    'Aaron\'s, Inc.   AAN',
];

foreach ($lines as $line) {
    [$names[], $symbols[]] = preg_split('~\s+(?=[A-Z]+$)~m', $line);
}
var_export($names);
echo "\n---\n";
var_export($symbols);

または:

//$text = file_get_contents('your_text_file.txt');
$text = <<<TEXT
3M Company      MMM
99 Cents Only Stores    NDN
AO Smith Corporation    AOS
Aaron's, Inc.   AAN
TEXT;

preg_match_all('~(.+?)\s+([A-Z]+)$~m', $text, $matches, PREG_SET_ORDER);
var_export(array_column($matches, 1));
echo "\n---\n";
var_export(array_column($matches, 2));
于 2021-04-05T23:36:23.007 に答える