会社名とそのティッカーシンボルを別の配列で取得する必要があります。txtファイルに保存されている私のデータは次のとおりです。
3M Company MMM
99 Cents Only Stores NDN
AO Smith Corporation AOS
Aaron's, Inc. AAN
等々
正規表現やその他の手法を使用してこれを行うにはどうすればよいですか?
会社名とそのティッカーシンボルを別の配列で取得する必要があります。txtファイルに保存されている私のデータは次のとおりです。
3M Company MMM
99 Cents Only Stores NDN
AO Smith Corporation AOS
Aaron's, Inc. AAN
等々
正規表現やその他の手法を使用してこれを行うにはどうすればよいですか?
各行を繰り返し、正規表現を使用してデータを収集します。
^(.+?)\s+([A-Z]+)$
後方参照$1
には会社名$2
が含まれ、ティッカーシンボルが含まれます。
2つまたは3つのスペース区切り文字を使用して文字列を2つに分割し、結果の2つの文字列をトリミングすることもできます。これは、会社名とティッカーシンボルが常に十分なスペースで区切られ、会社名自体にその量のスペースが含まれていないことが確実な場合にのみ機能します。
テキストファイルの形式はあなたに課せられていますか?選択肢がある場合は、テキストファイルのフィールドを区切るためにスペースを使用しないことをお勧めします。代わりに、|を使用してください または、$$など、コンテンツに表示されないことが保証されているものを、配列に分割するだけです。
テキストの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));