像这样的模式怎么样:
.*?\((CPT|ICD)-[A-Z0-9.]+\)
这将匹配零个或多个任意字符,非贪婪地,后跟 a(
后跟CPT
or 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);
你可以在这里看到一个工作演示。