我试图从可能的代码清单中筛选出公司代码.
以下代码是我到目前为止所做的,我需要使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,以获得上述预期产量?
以下是我自己过滤的规则(不一定适用于所有人)
只有字符或数字可以是自动收报机的一部分,没有特殊的字符或货币符号.
有时提示代码连同它们的交换代码作为前缀例如=> NYSE:C或者可能有两个字符交换代码作为后缀For Example => C.BY
如果全部为数字,那么它应该超过4位数.(这是为了排除数以百万计的误报)
但是,如果数字与交换代码一起被提及,那么股票代码可能小于4位数.因为,那么我们有很高的信心.
如果您需要更多详细信息,请告诉我们.
以下正则表达式将匹配以下内容.
.稍后有某个地方.这是为了检测具有多个交换符号的无效符号.后跟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测试了它,它正确匹配你的测试数据,但有例外R.我包括一个字符股票名称,因为它们是有效的(R是莱德系统).