我有以下RegEx来解析喜欢,资产等的ISIN ..(2个字符后跟10位数字和字符)
([A-Z]{2})([A-Z0-9]{10})
但这也标志着像ABCDEFGHIJKL
这样的词,但这不是真正的ISIN。 ISIN的定义如下:WIKI
所以有些例子是US45256BAD38
,US64118Q1076
,XS0884410019
。如果没有ABCDEFGHIJKL
等匹配项,那么搜索它们的正确RegEx是什么?
也许RegEx至少有一个号码?
答案 0 :(得分:5)
如果您不能根据Wikipedia的定义使用前瞻性功能,也可以只检查最后一个字符是否为数字,因为它应该是校验位。
ISIN由两个字母字符组成,分别是发行国的ISO 3166-1 alpha-2代码,九个字母数字字符(国家证券识别码或NSIN,用于标识证券),并在必要时添加前导零)和一个数字校验位。
来源:https://en.wikipedia.org/wiki/International_Securities_Identification_Number#Description
这也可以起作用:
([A-Z]{2})([A-Z0-9]{9})([0-9]{1})
答案 1 :(得分:0)
您可以使用前瞻性正则表达式:
\b([A-Z]{2})((?![A-Z]{10}\b)[A-Z0-9]{10})\b
如果所有10个字符都是前2个字符后的字母,那么 (?![A-Z]{10}\b)
是一个负面的预测,如果所有10个字符都是字母,则会导致匹配失败。