我想用正则表达式来检索标题:代码对。使用正则表达式来匹配模式
(.*?\(CPT-.*?\)|.*?\(ICD-.*?\))
数据:
耳聋双边(轻度)(ICD-389.18)的右手腕腱鞘囊肿(ICD-727.41)INTO左肩关节DEPO甲泼尼龙S/P INJECTION(CPT-20600)
我想捕捉:
- 耳聋双边(轻度)(ICD-389.18)
- 右手腕神经节囊肿(ICD-727.41)为左肩关节DEPO甲泼尼龙
- S/P喷射(CPT-20600)
什么是使用正确的正则表达式?
我想用正则表达式来检索标题:代码对。使用正则表达式来匹配模式
(.*?\(CPT-.*?\)|.*?\(ICD-.*?\))
数据:
耳聋双边(轻度)(ICD-389.18)的右手腕腱鞘囊肿(ICD-727.41)INTO左肩关节DEPO甲泼尼龙S/P INJECTION(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。
可以使用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);
考虑下面的正则表达式...
.*?\d\)
祝您好运!
您的捕获示例#1和#2都包含'RIGHT WRIST',这是故意的吗? – jmstoker
@jmstoker:不,我不认为,因为“听力损失”是“双边”,而不是位于“右手腕” –
@jmstoker我同意*卡西米尔*。参见[ICD-389.18](http://www.icd9data.com/2012/Volume1/320-389/380-389/389/389.18.htm)和[ICD-727.41](http://www.icd9data。 COM/2012/VOLUME1/710-739/725-729/727/727.41。htm) –