Regex 正则表达式在MATLAB中不工作

Regex 正则表达式在MATLAB中不工作,regex,matlab,Regex,Matlab,我没有在MATLAB中做任何正则表达式的工作,我不认为这是一个环境问题,但我不确定。我的任务是: 从下载NASDQ股票数据 使用正则表达式提取所有股票符号 这是我创建的正则表达式:^[A-Z]\\\\\\([A-Z]+)\\\\\.+\\[A-Z]\\\[A-Z]\\\[A-Z]\\\\\\\[A-Z].\\\[A-Z]+$ 此表达式适用于此文件中的某些行,但不是所有行。例如,它非常适合这一行: -Y | AAPL |苹果公司-普通股| Q | Q | N | 100 | N | N | AAP

我没有在MATLAB中做任何正则表达式的工作,我不认为这是一个环境问题,但我不确定。我的任务是:

  • 从下载NASDQ股票数据
  • 使用正则表达式提取所有股票符号
  • 这是我创建的正则表达式:^[A-Z]\\\\\\([A-Z]+)\\\\\.+\\[A-Z]\\\[A-Z]\\\[A-Z]\\\\\\\[A-Z].\\\[A-Z]+$
  • 此表达式适用于此文件中的某些行,但不是所有行。例如,它非常适合这一行: -Y | AAPL |苹果公司-普通股| Q | Q | N | 100 | N | N | AAPL

    但是,它与此行中的任何内容都不匹配: -Y | A |安捷伦科技有限公司普通股| N | N | 100 | N | A | A -Y | AAMC | Altisource资产管理公司Com | A | N | 100 | N | AAMC | AAMC


    请帮忙……谢谢

    您的文件似乎是一组以
    |
    分隔的列,第一行是列名

    下面是一个直接创建结构数组的解决方案,该数组的字段名从列名中获取:

    function [structArray] = ReadNasdaqTraded(filename)
    %[
        % For debug
        if (nargin < 1), filename = 'nasdaqtraded.txt'; end 
    
        % Read full file content
        text = fileread(filename);
    
        % Split on newline
        text = strsplit(strtrim(text), '\n');    
        header = text{1}; % Keep header
        content = text(2:(end-1)); % Keep content
        footer = text{end}; %#ok - We don't care about last line  (file creation date)
    
        % Build suitable field names
        fieldNames = strsplit(header, '|');
        fieldNames = strtrim(fieldNames); % Remove any
        fieldNames = strrep(fieldNames, ' ', ''); % spaces (TODO: OR special characters)
    
        % Reformat content into cell matrix
        count = length(content);
        columnCount = length(fieldNames);
        cellArray = cell(count, columnCount);
        for ri = 1:count,
            cellArray(ri, :) = strsplit(content{ri}, '|', 'CollapseDelimiters', false); % Carefull not to collapse empty delimiters
        end
    
        % Create structure array from cell content
        structArray = cell2struct(cellArray, fieldNames, 2);    
    %]
    

    易于使用,无论您需要什么额外的处理…

    我认为您无法为股票符号创建合理的正则表达式,因为我认为这些符号在命名上没有特定的规则。换句话说,符号几乎可以是任何东西我只是看了一下文本文件。行的格式有太多变化,我认为您无法编写一个
    regex
    ,以简洁地捕获您要查找的内容。您应该首先尝试拆分由|分隔的字段,然后处理各个字段。假设字段本身没有|,您应该能够使用strfind或simple==轻松完成此操作。谢谢,似乎这不是应该采取的方法,我发现了这一点,并且可以正确解析CSV文件。您是savior@citizensane
    >> ReadNasdaqTraded('nasdaqtraded.txt')
    
    ans = 
    
    8188x1 struct array with fields:
    
        NasdaqTraded
        Symbol
        SecurityName
        ListingExchange
        MarketCategory
        ETF
        RoundLotSize
        TestIssue
        FinancialStatus
        CQSSymbol
        NASDAQSymbol