我试图使用regex检索标题:代码对。
(.*?\(CPT-.*?\)|.*?\(ICD-.*?\))数据:
双侧感觉神经性听力损失(轻度) (ICD-389.18)右腕神经节囊肿(ICD-727.41)左肩关节内注射德波梅多尔(CPT-20600)
我想谈一谈:
正确使用的正则表达式是什么?
发布于 2013-11-14 18:44:01
像这样的图案呢?
.*?\((CPT|ICD)-[A-Z0-9.]+\)这将匹配任何字符中的零或多个,不贪婪,然后是(,后面是CPT或ICD,后面是连字符,后面是一个或多个大写拉丁字母、十进制数字或句点,后面是)。
请注意,我选择[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()),或确保匹配的前缀以非空白字符开头,方法是在前面放置一个\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-14 18:49:32
您可以使用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-14 18:51:52
想想下面的Regex..。
.*?\d\)祝好运!
https://stackoverflow.com/questions/19985670
复制相似问题