我需要在不同的数组中获取公司名称及其股票代码。这是我存储在 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
将包含股票代码。
您还可以使用两个或三个空格分隔符将字符串一分为二,然后修剪生成的两个字符串。这仅在您确定公司名称和股票代码始终由足够的空格分隔并且公司名称本身不包含该数量的空格时才有效。
使用可变空格作为两列文本之间的分隔符,有几种方法可以做到这一点。
您可以逐行处理文本文件file()
并使用preg_split()
来分隔变量空格上的文本,后跟一系列大写字母,然后是字符串的结尾,或者您可以使用file_get_contents()
withpreg_match_all()
然后提取两个捕获的列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));