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

标签 python regex

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

    相关文章:

    python - 是否可以通过 sqlalchemy 对数据库进行类似生成器的查询?

    java - 在 Java 中使用 Scrapy?

    Java正则表达式全部替换不替换所有单词

    c# - 查找所有没有括号的 if else 和 else if 语句

    python - jinja flask 和循环属性

    python - PYQT:水平和垂直标题

    python - gevent.monkey.patch_all() 之后的 max_user_connections

    regex - 删除最后一个 "/"之前的部分字符串

    regex - 限制正则​​表达式中字母字符的数量

    regex - 如何使用正则表达式查找文本是否包含特定单词?