我试图从可能的代码清单中过滤掉公司代码。
以下代码是我到目前为止所做的,我需要使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());
}
}
预期输出
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
您能否制定所需的RegExp,以获得上述预期的输出?
以下是我自己过滤的规则(不一定适用于所有人)
只有字符或数字可以是自动收报机的一部分,没有特殊的字符或货币符号。
有时提及代码连同其交换代码作为前缀 例如=> NYSE:C 或者可以有两个字符交换代码作为后缀 例如=> C.BY
如果是全数字,那么它应该超过4位数。 (这是为了排除数以百万计的误报)
但是,如果数字与交换代码一起提及,那么自动收报机可能少于4位数。因为,那么我们有很高的信心。
如果您需要更多详细信息,请与我们联系。
答案 0 :(得分:5)
以下正则表达式将匹配以下内容。
.
。这是为了检测具有多个交换符号的无效符号.
跟随a-z正好匹配2次。 ^
(?<PreXChangeCode>[a-z]{2,4}:(?![a-z\d]+\.))?
(?<Stock>[a-z]{1,4}|\d{1,3}(?=\.)|\d{4,})
(?<PostXChangeCode>\.[a-z]{2})?
$
我使用REY对其进行了测试,并且正确匹配了您的测试数据和R
的例外情况。我包含了一个字符股票名称,因为它们是有效的(R是莱德系统)。