正则表达式在T-SQL中命名捕获组

时间:2015-01-15 15:05:53

标签: sql-server regex tsql

我需要从需求文档中提取ICD 9值。 ICD 9值可以是单个代码,如V91.19或范围441.00-441。例如:

    4. Peripheral vascular disorders - ICD-9-CM codes: 440.0-440.9, 441.00-441.9, 442.0-442.9, 443.1-443.9, 447.1, 557.1, 557.9, V43.4, V91.19, V9000, V91, M8440/0

最终,目标是在WHERE子句中使用这些值:

SELECT * 
FROM ICD9 
WHERE (
        (CODE BETWEEN '440.0' AND '440.9')
        OR (CODE BETWEEN '441.00' AND '441.9')
        ...
        OR CODE IN ('447.1', '557.1', '557.9', 'V43.4', 'V91.19', 'V9000', 'V91', 'M8440/0') 
      )

这个正则表达式:

/[A-Z]?[0-9]+[\.\/]?[0-9]*/g

匹配:

  • 各个ICD 9值(447.1
  • 范围的起始值和结束值(440.0 - 440.9
  • 4.和ICD - 9 - CM - 不可取

如何修改我的正则表达式:

  • 为各个值创建一个捕获组?
  • 为范围值创建捕获组?
  • 排除不受欢迎的人?

1 个答案:

答案 0 :(得分:1)

你的意思是这样吗?

[A-Z]?[0-9]+[\.\/]?(?=\d)[0-9]*

其中

  • (?=\d) 肯定前瞻 - 断言只有数字[0-9]才能匹配正则表达式

同样的结果是,如果您删除最后一位数字的可选 * 部分,并将其替换为 +

[A-Z]?[0-9]+[\.\/]?[0-9]+

https://regex101.com/r/nK3zB3/2

关于我认为可能类似的范围和组:

(([A-Z]?[0-9]+[\.\/]?[0-9]+)[-]*(([A-Z]?[0-9]+[\.\/]?[0-9]+))?)

<强> Online Demo