Python正则表达式匹配不同格式的6位数字

我需要查找并捕获所有出现的带有 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

看在线演示

  • 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位数字的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>