regex 至少有1个数字的ISIN

eanckbw9  于 2022-11-26  发布在  其他
关注(0)|答案(2)|浏览(132)

我有下面的正则表达式来解析债券、资产等的ISIN。(2个字符后跟10个数字和字符)

([A-Z]{2})([A-Z0-9]{10})

但这也标志着例如像ABCDEFGHIJKL这样的单词,但这不是真实的的ISIN。ISIN的定义如下:WIKI
例如,US45256BAD38US64118Q1076XS0884410019。如果没有ABCDEFGHIJKL这样的匹配项,应该使用什么样的RegEx来搜索它们?
也许用RegEx至少要有一个数字?

ee7vknir

ee7vknir1#

如果你不能根据维基百科的定义使用lookahead,你也可以只检查最后一个字符是否是一个数字,因为它应该是校验位。
ISIN由两个字母字符(发行国家的ISO 3166-1字母-2代码)、九个字母数字字符(国家证券识别号或NSIN,用于识别证券,必要时用前导零填充)和一个数字校验位组成。
来源:https://en.wikipedia.org/wiki/International_Securities_Identification_Number#Description
意思是这样也可以:

([A-Z]{2})([A-Z0-9]{9})([0-9]{1})
jdzmm42g

jdzmm42g2#

您可以使用lookahead正则表达式:

\b([A-Z]{2})((?![A-Z]{10}\b)[A-Z0-9]{10})\b

RegEx Demo
(?![A-Z]{10}\b)是一个负的前瞻,如果所有10个字符都是前2个字符之后的字母,则匹配失败。

相关问题