regex - 正则表达式检测优先股符号
问题描述
首先,正则表达式可能是我编程领域最缺乏天赋的方面,这是我目前所拥有的:
\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
解决方案
这应该这样做:
^[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
推荐阅读
- scala - 如何根据另一列的值从 Spark DataFrame 中选择特定列?
- ruby-on-rails - 有没有办法更新次要属性?
- firebase - 如果我使用电话号码登录用户而不在 Firebase 中创建用户,会发生什么?
- javascript - 如何通过对象传递道具
- python - 如何将标记的 x 值添加到此系列图?
- django - Django如何将评级显示为星星?
- javascript - Reactjs 组件不更新
- vb.net - 将 DGV 表传递给 VB.Net 中的报表查看器
- laravel - 为什么 Laravel Vapor 不在我的构建步骤中注入 ASSET_URL?
- admob - 修改广告代码调整广告框架大小下的 Admob 政策违规