首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Regex匹配模式

使用Regex匹配模式
EN

Stack Overflow用户
提问于 2013-11-14 18:39:39
回答 3查看 506关注 0票数 2

我试图使用regex检索标题:代码对。

代码语言:javascript
复制
(.*?\(CPT-.*?\)|.*?\(ICD-.*?\))

数据:

双侧感觉神经性听力损失(轻度) (ICD-389.18)右腕神经节囊肿(ICD-727.41)左肩关节内注射德波梅多尔(CPT-20600)

我想谈一谈:

  • 双侧感音神经性聋(轻度) (ICD-389.18)
  • 右腕神经节囊肿(ICD-727.41)
  • 左肩关节S/P注射DEPO (CPT-20600)

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-14 18:44:01

像这样的图案呢?

代码语言:javascript
复制
.*?\((CPT|ICD)-[A-Z0-9.]+\)

这将匹配任何字符中的零或多个,不贪婪,然后是(,后面是CPTICD,后面是连字符,后面是一个或多个大写拉丁字母、十进制数字或句点,后面是)

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

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

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

如果要避免使用任何周围的空格,只需修剪结果字符串(m => m.Value.Trim()),或确保匹配的前缀以非空白字符开头,方法是在前面放置一个\S,如下所示:

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

如果您需要处理像(ICD-100)(ICD-200)这样的输入,也可以使用负前瞻性

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

您可以看到一个工作的示范在这里

票数 4
EN

Stack Overflow用户

发布于 2013-11-14 18:49:32

您可以使用split()方法:

代码语言:javascript
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2013-11-14 18:51:52

想想下面的Regex..。

代码语言:javascript
复制
.*?\d\)

祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19985670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档