我有以下RegEx来解析喜欢,资产等的ISIN ..(2个字符后跟10个数字和字符)
([A-Z]{2})([A-Z0-9]{10})
Run Code Online (Sandbox Code Playgroud)
但这也标志着一个像这样的词ABCDEFGHIJKL,但这不是真正的ISIN.ISIN的定义如下:WIKI
因此,一些例子是US45256BAD38,US64118Q1076,XS0884410019.什么是正确的RegEx来搜索它们,没有类似的匹配ABCDEFGHIJKL?
也许RegEx至少有一个号码?
小智 7
如果根据维基百科的定义你不能使用前瞻,你也可以检查最后一个字符是否是一个数字,因为它应该是校验位.
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})
Run Code Online (Sandbox Code Playgroud)
您可以使用前瞻正则表达式:
\b([A-Z]{2})((?![A-Z]{10}\b)[A-Z0-9]{10})\b
Run Code Online (Sandbox Code Playgroud)
(?![A-Z]{10}\b)是负向先行,如果所有 10 个字符都是前 2 个字符之后的字母,则匹配失败。