我有下面的正则表达式来解析债券、资产等的ISIN。(2个字符后跟10个数字和字符)
([A-Z]{2})([A-Z0-9]{10})
但这也标志着例如像ABCDEFGHIJKL这样的单词,但这不是真实的的ISIN。ISIN的定义如下:WIKI例如,US45256BAD38、US64118Q1076、XS0884410019。如果没有ABCDEFGHIJKL这样的匹配项,应该使用什么样的RegEx来搜索它们?也许用RegEx至少要有一个数字?
ABCDEFGHIJKL
US45256BAD38
US64118Q1076
XS0884410019
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})
jdzmm42g2#
您可以使用lookahead正则表达式:
\b([A-Z]{2})((?![A-Z]{10}\b)[A-Z0-9]{10})\b
RegEx Demo(?![A-Z]{10}\b)是一个负的前瞻,如果所有10个字符都是前2个字符之后的字母,则匹配失败。
(?![A-Z]{10}\b)
2条答案
按热度按时间ee7vknir1#
如果你不能根据维基百科的定义使用lookahead,你也可以只检查最后一个字符是否是一个数字,因为它应该是校验位。
ISIN由两个字母字符(发行国家的ISO 3166-1字母-2代码)、九个字母数字字符(国家证券识别号或NSIN,用于识别证券,必要时用前导零填充)和一个数字校验位组成。
来源:https://en.wikipedia.org/wiki/International_Securities_Identification_Number#Description
意思是这样也可以:
jdzmm42g2#
您可以使用lookahead正则表达式:
RegEx Demo
(?![A-Z]{10}\b)
是一个负的前瞻,如果所有10个字符都是前2个字符之后的字母,则匹配失败。