1

所以我试图在 python 中为 MBI(医疗受益人标识符)创建一个正则表达式,而我的正则表达式不起作用。

MBi 的任何示例是:1EG4-TE5-MK73

这是 MBI 的格式:

  • 11 个字符

  • MBI 的第 2、5、8 和 9 个字符将始终是字母。

  • 字符 1、4、7、10 和 11 始终是数字。

我尝试使用以下正则表达式但无济于事:

mbi=re.compile(r"[1-9]{1}[^SLOIBZsloibz|^0-9]{1}[^SLOIBZsloibz]{1}[0-9]{1}-?[^SLOIBZsloibz|^0-9]{1}[^SLOIBZsloibz]{1}[0-9]{1}-?[^SLOIBZsloibz|^0-9]{1}[^SLOIBZsloibz|^0-9]{1}[0-9]{1}[0-9]{1}")

有什么建议么?!?!

4

3 回答 3

2

这是 MBI 的格式:

  1. 11 个字符
  2. MBI 的第 2、5、8 和 9 个字符将始终是字母。
  3. 字符 1、4、7、10 和 11 始终是数字。

没有提及第3第 6 个字符,但根据您的示例,您可以使用如下正则表达式:

\b\d[A-Z]{2}\d-[A-Z]{2}\d-[A-Z]{2}\d{2}\b

正则表达式演示


正则表达式解释: 在此处输入图像描述

于 2018-12-07T19:29:09.417 回答
1

好的,所以根据您的正则表达式,您尝试做的某些事情在语法上是不正确的。当您希望它只出现一次时,不需要通过花括号进行量化,因为这{1}变得多余。所以我已经从你的正则表达式中删除了这部分。在你的角色集中的第二件事,

[^SLOIBZsloibz|^0-9]

正如我所看到的,您想要否定某些字母和 0-9 位数字。使用 character set 时不必应用交替[]。除了否定字符集中的那些字母之外,如果你还想否定 0-9 数字,你只需简单地把它放在那里,你想要的正确字符集就变成了,

[^SLOIBZsloibz0-9]

在你的正则表达式中应用这些更正后,你的正则表达式变成了这个,我猜这就是你需要的。

^[1-9][^SLOIBZsloibz0-9][^SLOIBZsloibz][0-9]-?[^SLOIBZsloibz0-9][^SLOIBZsloibz][0-9]-?[^SLOIBZsloibz0-9][^SLOIBZsloibz0-9][0-9][0-9]$

演示

让我知道这是否适合您。

于 2018-12-07T19:15:41.547 回答
0

我添加了一些\\-,因此它不会将哈希算作有效的字母数字字符。

^[1-9][^SLOIBZsloibz0-9][^SLOIBZsloibz][0-9]-?[^SLOIBZsloibz0-9\\-][^SLOIBZsloibz\\-][0-9]-?[^SLOIBZsloibz0-9\\-][^SLOIBZsloibz0-9\\-][0-9][0-9]$
于 2020-11-25T19:30:39.140 回答