首先,正则表达式可能是我编程带中最没有天赋的方面,这就是我目前所拥有的:
\D{1,5}(PR)\D+$
\D{1,5}
因为普通股代码总是最多 5 个字母
(PR)
因为这是需要搜索的模式的一部分(更多在下面的背景信息中)
\D+$
因为我试图匹配字符串末尾的任何单个字母
背景的小花絮
优先股符号没有标准化,因此每个平台、交易所等都有自己的显示方式。话虽如此,大多数人在他们的名字中显示一个特殊字符,这使得这些人很容易被发现。字符是
[] {'.', '/', '-', ' ', '+'};
更棘手的都有类似的模式:
{symbol}公关{0}
{symbol}p{0}
{symbol}P{0}
其中 0
只是任意单个字母 A-Z
这里是一些比较棘手的样本数据集:
PSAPRZ
PSApA
PSApZ
PSAPA
PSAPZ
我的正则表达式似乎适用于第一个,因为我专门寻找 (PR) 并在末尾匹配任何单个字母字符,但我一生都无法弄清楚如何检测在同一正则表达式中以 p{0}
或 P{0}
结尾的模式。我完全放弃了寻找特殊符号的尝试,因为我可以轻松地在目标字符串上为任何这些字符执行 string.Contains
。更重要的部分是找出这些更棘手的问题。
如何让我的 regex 语句也检测同一个 regex 语句中的 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
答案 0 :(得分:3)
应该这样做:
^[A-Z]{1,5}([Pp]|PR)[A-Z]$
说明:
^
- 开始时的锚点[A-Z]{1,5}
- 一到五个大写字母([Pp]|PR)
- 捕获组用于:大写 P
或小写 p
或大写 PR
[A-Z]
- 一个大写字母$
- 锚点结束在有问题的编辑 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