正则表达式使用JAVA检测公司代码

Wat*_*att 2 regex

我试图从可能的代码清单中筛选出公司代码.

以下代码是我到目前为止所做的,我需要使RegExp足够复杂,只传递某些模式.有关更多具体细节,请参阅下面的示例代

Pattern tickerPattern = Pattern.compile("^[A-Z:\\.0-9]+$");

String[] tickerStrArr={
                    "JELK90#$",  // NOT A TICKER
                    "1",         // NOT A TICKER
                    "0",         // NOT A TICKER
                    "R",         // NOT A TICKER
                    "25.36",     // NOT A TICKER
                    "1.0",       // NOT A TICKER
                    "GOOG",      // Ticker
                    "NYSE:C",    // Ticker (with exchange code NYSE)
                    "GOOG.BY",   // Ticker (with exchange code BY)
                    "$90",       // NOT A TICKER
                    "98774",     // Ticker (because more than 4 digit long)
                    "789.BY"     // Ticker (because ends with .[A-Z]{2,2})
                   };

for(String tickerStr: tickerStrArr)
{
    Matcher matcher =tickerPattern.matcher(tickerStr);

    if(matcher.find())
    {
        System.out.println("It's a ticker=>"+matcher.group());
    }
}
Run Code Online (Sandbox Code Playgroud)

预期产出

It's a ticker=>GOOG
It's a ticker=>NYSE:C
It's a ticker=>GOOG.BY
It's a ticker=>98774
It's a ticker=>789.BY
Run Code Online (Sandbox Code Playgroud)

您能否制定所需的RegExp,以获得上述预期产量?

以下是我自己过滤的规则(不一定适用于所有人)

  1. 只有字符或数字可以是自动收报机的一部分,没有特殊的字符或货币符号.

  2. 有时提示代码连同它们的交换代码作为前缀例如=> NYSE:C或者可能有两个字符交换代码作为后缀For Example => C.BY

  3. 如果全部为数字,那么它应该超过4位数.(这是为了排除数以百万计的误报)

  4. 但是,如果数字与交换代码一起被提及,那么股票代码可能小于4位数.因为,那么我们有很高的信心.

如果您需要更多详细信息,请告诉我们.

Dan*_*nez 6

以下正则表达式将匹配以下内容.

  • 字符串的开头
  • PreXChangeCode:可选地匹配az,2到4次,除非.稍后有某个地方.这是为了检测具有多个交换符号的无效符号
  • 库存:az 1到4次或数字1-3次,然后是一个周期或一个数字4次或更多次
  • PostXChangeCode:可选地将.后跟az精确匹配2次.
  • 字符串结束

正则表达式

 ^
 (?<PreXChangeCode>[a-z]{2,4}:(?![a-z\d]+\.))?
 (?<Stock>[a-z]{1,4}|\d{1,3}(?=\.)|\d{4,})
 (?<PostXChangeCode>\.[a-z]{2})?
 $
Run Code Online (Sandbox Code Playgroud)

REY

我用REY测试了它,它正确匹配你的测试数据,但有例外R.我包括一个字符股票名称,因为它们是有效的(R是莱德系统).