1

我需要在不同的数组中获取公司名称及其股票代码。这是我存储在 txt 文件中的数据:

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

等等

我将如何使用正则表达式或其他一些技术来做到这一点?

4

4 回答 4

1

文本文件的格式是强加给你的吗?如果您可以选择,我建议您不要使用空格来分隔文本文件中的字段。相反,使用 | 或 $$ 或您可以确保不会出现在内容中的内容,然后将其拆分为数组。

于 2009-07-23T18:30:51.113 回答
1

遍历每一行,并使用正则表达式收集数据:

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

反向引用$1将包含公司名称,$2将包含股票代码。

您还可以使用两个或三个空格分隔符将字符串一分为二,然后修剪生成的两个字符串。这仅在您确定公司名称和股票代码始终由足够的空格分隔并且公司名称本身不包含该数量的空格时才有效。

于 2009-07-23T18:26:01.623 回答
0

试试这个正则表达式:

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

也许有更多 PHP 经验的人可以使用preg_split或类似的东西充实代码示例。

于 2009-07-23T18:24:41.627 回答
0

使用可变空格作为两列文本之间的分隔符,有几种方法可以做到这一点。

您可以逐行处理文本文件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));
于 2021-04-05T23:36:23.007 回答