文章目录
- [1. ISBN](#1. ISBN)
- [2. 正则匹配](#2. 正则匹配)
- [3. 示例](#3. 示例)
1. ISBN
ISBN(International Standard Book Number)是国际标准图书编号的缩写,是一种用于标识图书的唯一标识符。它是由国际 ISBN 机构(International ISBN Agency)管理的一种国际标准。ISBN 通常用于书籍的出版、销售和库存管理等方面。
以 ISBN-13 为例,由13个数字组成,分为5个部分:
- Prefix Element(前缀元素): 通常为978或979,用于表示出版者或国家/地区。
- Registration Group(注册组): 由1到5位数字组成,用于表示出版者或出版组织。
- Registrant(出版者): 由1到7位数字组成,用于表示特定的出版者。
- Publication(出版物): 由1到6位数字组成,用于表示特定出版物。
- Check Digit(校验位): 由一位数字或字母组成,用于检验其他部分的准确性。
ISBN 用于帮助唯一标识每一本书,使得图书在国际范围内可以被准确地识别和跟踪。它通常出现在图书的背面或版权页上,以供扫描或手动输入。ISBN 在图书行业中广泛应用,有助于图书销售、库存管理、图书检索等工作的进行。
2. 正则匹配
以下是匹配 ISBN-10 和 ISBN-13 的正则表达式,注意以下不是严谨的匹配规则,仅是验证 ISBN 的必要条件:
- ISBN-10 的正则表达式:
python
(?:[0-9]+\-?){9}[0-9X]
解释:
(?:[0-9]+\-?)
:这是一个非捕获组,用(?: ... )
包围起来。它匹配一个或多个数字[0-9]+
,后面跟着一个可选的连字符\-?
,\-
匹配一个连字符-
,?
表示这个连字符是可选的。{9}
:表示前面的非捕获组正好出现9次,即匹配9个数字和可选的连字符的组合。[0-9X]
:匹配最后一位的数字或字母 X。这个字符集匹配一个数字 0 到 9 或者是一个大写的字母 X,表示校验位。
包含了9个数字和一个可选的连字符,以及一个数字或字母 X 作为校验位。
- ISBN-13 的正则表达式:
python
(?:978|979)\-?(?:[0-9]+\-?){10}
解释:
(?:978|979)
:这是一个非捕获组,匹配数字序列978或979,这是ISBN-13号的前缀。\-*
:匹配零个或多个连字符。(?:[0-9]+\-?)
:这是一个非捕获组,匹配一个或多个数字,后面可能跟一个连字符。{10}
:表示前面的非捕获组正好出现10次,即匹配10个数字和可选的连字符的组合。
包含了978或979作为前缀,零个或多个连字符,然后是10个数字和可选的连字符。
- ISBN-10 加 ISNB-13 的正则表达式
python
(?:[0-9]+\-?){9}[0-9X]|(?:978|979)\-?(?:[0-9]+\-?){10}
3. 示例
python
isbn_re = "(?:[0-9]+\-?){9}[0-9X]|(?:978|979)\-?(?:[0-9]+\-?){10}"
text = 'This is a sample text with 0-596-52068-9, 0596520689, ISBN-13 978-1-4028-9462-6 and another 9781402894626'
results = re.findall(isbn_re, text)
print(results)
输出:
bash
['0-596-52068-9', '0596520689', '978-1-4028-9462-6', '9781402894626']