如果有一个文本(实际上有很多文本),其中某处有一个ISBN,我必须找到它。
我知道:我的ISBN-13将以“978”开头,后跟10位数字。
我不知道:有多少个“-”(负号),是否在正确的位置。
我的代码只会找到不带任何负号的ISBN:

regex=r'978[0-9]{10}'
pattern = re.compile(regex, re.UNICODE)
for match in pattern.findall(mytext):
    print(match)

但我怎么能找到这样的ISBN:
978-123-456-789-0
978-1234-567890
九兆七千八百一十二亿三千四百五十六万七千八百九十
等。。。
有一种正则表达式模式吗?
谢谢!

最佳答案

这与10位数字匹配,并允许在每个数字之前使用一个可选连字符:

regex = r'978(?:-?\d){10}'

10-07 15:30