我需要查找并捕获所有出现的带有 OMIM 和 MIM 前缀的 6 位数字以及所有前面没有冒号的 6 位数字。
预期输出
[111111, 222222, 555555, 444444]
我试过的import re
sentence = '111111;Dystonia-1,222222,OMIM:555555; 3333333 Dystonic disorder1,MIM#444444'
re1 = r'OMIM:(\d{6})'
re2 = r'MIM#(\d{6})'
re3 = r'[^:](\d{6})'
identifiers = re.compile("(%s|%s|%s)" % (re1, re2, re3)).findall(sentence)
电流输出[
( ',222222' , '' , '' , '222222' ),
( 'OMIM:555555' , '555555' , '' , '' ),
( ' 333333' , '' , '' , '333333' ),
( 'MIM#444444' , '' , '444444' , '' )
]
最佳答案
我想你可以试试:
\b(?:MIM#|OMIM:|(?<!:))(\d{6})\b
在线查看demo\b
- 字边界。 (?:
- 非捕获组:MIM#|OMIM:|(?<!:)
- 字面意思是“MIM#”或“OMIM:”或断言位置的否定后视,前面没有冒号。 )
.关闭非捕获组。 (\d{6})
- 在捕获组中捕获六位数字。 \b
- 字边界。 import re
sentence = '111111;Dystonia-1,222222,OMIM:555555; 3333333 Dystonic disorder1,MIM#444444'
print(re.findall(r'\b(?:MIM#|OMIM:|(?<!:))(\d{6})\b', sentence))
打印:['111111', '222222', '555555', '444444']
关于Python正则表达式匹配不同格式的6位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66243830/