适用于所有国家药品代码(NDC 10和11)格式的Python RegEx

cotxawn7  于 2023-10-22  发布在  Python
关注(0)|答案(2)|浏览(108)

目标:RegEx适合许多可能的NDC 10和11格式。
我已经有了一个很好的开始...NDC 10:

^[0-9][0-9][0-9][0-9]\-[0-9][0-9][0-9][0-9]\-[0-9][0-9]$

例如1234-1234-12Reference
然而,我后来了解到还有其他格式和11位数:

  • 4-4-2
  • 5-3-2
  • 5-4-1
  • 5-4-2(11位数字)
    我如何为所有这些可能性编写一个RegEx?
    问题:

1.可选第11位,
1.* 移动 * 连字符

yzckvree

yzckvree1#

您可以使用

^(?:\d{4}-\d{4}-\d{2}|\d{5}-(?:\d{3}-\d{2}|\d{4}-\d{1,2}))$

参见regex demo。* 详情 *:

  • ^-字符串的开头
  • (?:-第一个非捕获组的开始:
  • \d{4}-\d{4}-\d{2}-四位数,-,四位数,-,两位数
  • |-或
  • \d{5}--五位数,-
  • (?:-第二个非捕获组的开始:
  • \d{3}-\d{2}-三位数,-,两位数
  • |-或
  • \d{4}-\d{1,2}-四位数,-和一位或两位数
  • )-第二个非捕获组的结束
  • )-第一个非捕获组的结束。
  • $-字符串结束。
mkshixfv

mkshixfv2#

在pandas DataFrame中使用列表解析的方法:

# add zeros to each portion of ndc10 to fit 5,4,2 ndc11 0-filled format
a = [f"0{x[0]}" if len(x[0]) == 4 else x[0] for x in list(ndcd.NDC10.str.split("-"))]
b = [f"0{x[1]}" if len(x[1]) == 3 else x[1] for x in list(ndcd.NDC10.str.split("-"))]
c = [f"0{x[2]}" if len(x[2]) == 1 else x[2] for x in list(ndcd.NDC10.str.split("-"))]

# rejoin sections to full ndc11
ndcd["NDC11"] = ["".join(x) for x in list(zip(a, b, c))]

相关问题