我正在尝试编写一个解析<stock ticker> - <company>
的正则表达式。问题是输入有点不可预测,允许的代码格式很宽。
自动收报机内部的一个连字符是正常的,但如果连字符开始或结束自动收报机则不行。并且不允许使用多个自动收报机。所以“BRK-B - Berkshire”应解析为“BRK-B”,“ALL Allstate”应解析为“ALL”。此外,连字符的相同规则适用于句号。
空格应表示自动收报机的结束。
现在我正在使用正则表达式[a-zA-Z.-]*
和其他检查来确保数据格式正确。这真的是尾随功能=糟糕(但如果内部= OK)规则让我绊倒了。我不知道如何告诉它“ALL Allstate”应该是“ALL”,但“BRK-B-Berkshire”应该是“BRK-B”。我想知道是否有单行正则表达式会改为上述。
答案 0 :(得分:3)
你可能想要这样的东西:
/[a-z](?:[a-z.-]*[a-z])?/i
这会强制第一个和最后一个字母为实际字母,并且只允许字词本身内的.
和-
。