2

我正在尝试使用正则表达式来检索 Title:Code 对。

(.*?\(CPT-.*?\)|.*?\(ICD-.*?\))

数据:

感觉神经性听力损失双边(轻度) (ICD-389.18) 右腕神经节囊肿 (ICD-727.41) 左肩关节 S/P 注射 DEPO MEDROL (CPT-20600)

我想捕捉:

  • 感觉神经性听力损失双边(轻度)(ICD-389.18)
  • 右腕神经节囊肿 (ICD-727.41)
  • 左肩关节 S/P 注射 DEPO MEDROL (CPT-20600)

什么是正确的正则表达式?

4

3 回答 3

4

像这样的模式怎么样:

.*?\((CPT|ICD)-[A-Z0-9.]+\)

这将匹配零个或多个任意字符,非贪婪地,后跟 a(后跟CPTor ICD,后跟连字符,后跟一个或多个大写拉丁字母、十进制数字或句点,后跟 a )

请注意,我之所以选择[A-Z0-9.]+,是因为据我了解,所有当前的 ICD-9 代码ICD-10 代码CPT 代码都符合该模式。

C# 代码可能看起来有点像这样:

var result = Regex.Matches(input, @".*?\((CPT|ICD)-[A-Z0-9.]+\)")
                  .Cast<Match>()
                  .Select(m => m.Value);

如果您想避免周围有任何空格,您只需修剪结果字符串 ( ),或者通过在前面m => m.Value.Trim()放置 a 来确保匹配的前缀以非空格字符开头,如下所示:\S

var result = Regex.Matches(input, @"\S.*?\((CPT|ICD)-[A-Z0-9.]+\)")
                  .Cast<Match>()
                  .Select(m => m.Value);

或者,如果您需要处理以下输入,请使用负前瞻(ICD-100)(ICD-200)

var result = Regex.Matches(input, @"(?!\s).*?\((CPT|ICD)-[A-Z0-9.]+\)")
                  .Cast<Match>()
                  .Select(m => m.Value);

你可以在这里看到一个工作演示

于 2013-11-14T18:44:01.523 回答
1

您可以使用以下split()方法:

string input = "SENSORINEURAL HEARING LOSS BILATERAL (MILD) (ICD-389.18) RIGHT WRIST GANGLION CYST (ICD-727.41) S/P INJECTION OF DEPO MEDROL INTO LEFT SHOULDER JOINT (CPT-20600)";
string pattern = @"(?<=\))\s*(?=[^\s(])";
string[] result = Regex.Split(input, pattern);
于 2013-11-14T18:49:32.393 回答
0

考虑以下正则表达式...

.*?\d\)

祝你好运!

于 2013-11-14T18:51:52.027 回答