首页 > 解决方案 > 正则表达式检测优先股符号

问题描述

首先,正则表达式可能是我编程领域最缺乏天赋的方面,这是我目前所拥有的:
\D{1,5}(PR)\D+$

\D{1,5}因为普通股票符号总是最多 5 个字母
(PR),因为这是需要搜索的模式的一部分(在背景信息下面有更多信息)
\D+$因为我试图匹配字符串末尾的任何单个字母

背景的小花絮
优先股票代码没有标准化,因此每个平台、交易所等都有自己的显示方式。话虽如此,大多数人的名字中都会显示一个特殊字符,这使得这些人很容易被发现。字符是
[] {'.', '/', '-', ' ', '+'};
比较棘手的都有类似的模式:
{symbol}PR{0}
{symbol}p{0}
{symbol}P{0}任何单个字母 AZ
在哪里0

以下是较棘手的样本数据集:

PSAPRZ
PSApA
PSApZ
PSAPA
PSAPZ

我的正则表达式似乎适用于第一个,因为我专门寻找(PR)并在最后匹配任何单个字母字符,但我无法为我的生活弄清楚如何也检测模式以p{0}P{0}以相同的正则表达式结尾。我完全放弃了寻找特殊符号的尝试,因为我可以轻松地string.Contains为任何这些字符在目标字符串上做一个。更重要的部分是找出这些更棘手的部分。

如何让我的正则表达式语句也检测同一正则表达式语句中的 p{0} 和 P{0} 匹配?

编辑 1 如果您对不同可能性的疯狂感到好奇,包括“易于检测”的版本,请拿一个爆米花,给您 :)

PSA.PA
PSA.PR.A
PSA/PA
PSAPRA
PSA-A
PSA PRA
PSA.PRA
PSA.PA
PSA+A
PSA/PRA
PSApA
PSAPA
PSA-PA

标签: regex

解决方案


这应该这样做:

^[A-Z]{1,5}([Pp]|PR)[A-Z]$

解释:

  • ^- 在开始时锚定
  • [A-Z]{1,5}- 一到五个大写字母
  • ([Pp]|PR)- 捕获组用于:大写P或小写p或大写PR
  • [A-Z]- 一个大写字母
  • $- 锚在最后

在有问题的 EDIT 1 之后更新。.要使用, ,支持奇数格式/-+使用以下命令:

^[A-Z]{1,5}[.\/\s\+\-]?([Pp]|PR\.?)[A-Z]$

解释:

  • ^- 在开始时锚定
  • [A-Z]{1,5}- 一到五个大写字母
  • [.\/\s\+\-]?- 可选的单个字符., /, , +,-
  • ([Pp]|PR\.?)- 捕获组用于:大写P,或小写p,或大写PR后跟可选.
  • [A-Z]- 一个大写字母
  • $- 锚在最后

关于锚点的注意事项:^...$如果字符串中只有股票代码,请使用锚点。如果您在其中的任何地方都有带有股票代码的文本,请改用单词边界\b...\b

了解更多关于正则表达式:https ://twiki.org/cgi-bin/view/Codev/TWikiPresentation2018x10x14Regex


推荐阅读