我正在尝试使用正则表达式来检索标题:代码对。
(.*?\(CPT-.*?\)|.*?\(ICD-.*?\))
数据:
双侧感觉神经性听力损失(轻度)(ICD-389.18) 右腕神经节囊肿 (ICD-727.41) 将 DEPO MEDROL S/P 注入(inject)到左肩关节 (CPT-20600)
我想捕捉:
- 双侧感音神经性听力损失(轻度)(ICD-389.18)
- 右手腕神经节囊肿 (ICD-727.41)
- 将 DEPO MEDROL 注入(inject)到左肩关节 (CPT-20600)
正确使用的正则表达式是什么?
最佳答案
像这样的模式怎么样:
.*?\((CPT|ICD)-[A-Z0-9.]+\)
这将非贪婪地匹配零个或多个任何字符,后跟 (
后跟 CPT
或 ICD
,后跟连字符,后跟一个或多个大写拉丁字母、十进制数字或句点,后跟 )
。
请注意,我选择了[A-Z0-9.]+
,因为据我了解,所有当前的ICD-9 codes , ICD-10 codes ,和CPT codes符合该模式。
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);
您可以看到正在运行的 demonstration here .
关于c# - 使用正则表达式来匹配模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19985670/