c# - 使用正则表达式来匹配模式

标签 c# regex

我正在尝试使用正则表达式来检索标题:代码对。

(.*?\(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.]+\)

这将非贪婪地匹配零个或多个任何字符,后跟 ( 后跟 CPTICD,后跟连字符,后跟一个或多个大写拉丁字母、十进制数字或句点,后跟 )

请注意,我选择了[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/

相关文章:

java - 使用 "*"的字符串拆分题

c# - 获取对象的所有属性

c# - 自定义字符串排序器

python - 如何删除 BeautifulSoup 中的空格

python - 用于查找星号的正则表达式(仅当不被数字包围时)

javascript - 匹配连字符和重叠之间的所有内容?

c# - 复杂匿名对象到动态公共(public)属性

c# - 具有高级功能的表

c# - 如何在启动时隐藏我的 SmartDevice 应用程序?

java - 重复解析(并分组)正则表达式