首页 > 解决方案 > 根据特定单词选择句子

问题描述

外行术语:

我想要一个包含以下术语的句子:颈椎、C[1-5] 和/或 T[1-6],但不包括腰椎、T[7-9] 和/或 T1[0- 2]。

例子:

** 调查结果 **:以腰椎 C3 为中心的脊柱的最小右旋脊柱侧凸。

期望的输出:

no sentence selected

尝试#1:

我尝试使用 if-then 语句。如果句子不包含这些术语,则检查该句子是否包含我想要的术语。

正则表达式: [^.]*(?(?!lumbar|T[7-9]|T1[0-2][^.]*?\.)((?i)cervi[cx][^.]*?\.)|((C[1-7]|T[1-6])(?(?=\.)[^.]*?\.|\D[^.]*?\.)))

输出: ** 调查结果 **:以腰椎 C3 为中心的脊柱的最小右旋脊柱侧凸。

尝试#2

我尝试按照我在网上阅读的格式,您将您想要的单词与您不想要的单词链接在一个句子中

正则表达式: [^.]*(?=((?i)cervi[cx][^.]*?\.)|((C[1-7]|T[1-6])(?(?=\.)[^.]*?\.|\D[^.]*?\.)))(?!lumbar|T[7-9]|T1[0-2][^.]*?\.)

输出:

** 调查结果 **:以腰椎 C3 为中心的脊柱的最小右旋脊柱侧凸。

尝试#3

我假设这可能[^.]*与我的逻辑不匹配,所以我将它移到了负前瞻组的 if 语句中,然后再分组。

正则表达式:

(?(?![^.]*lumbar|T[7-9]|T1[0-2][^.]*?\.)[^.]*((?i)cervi[cx][^.]*?\.)|((C[1-7]|T[1-6])(?(?=\.)[^.]*?\.|\D[^.]*?\.)))

输出:

** 调查结果 **:以腰椎 C3 为中心的脊柱的最小右旋脊柱侧凸。

所以任何帮助表示赞赏。谢谢,麻烦您了。

标签: regexregex-lookaroundsregex-negation

解决方案


我最终分两步完成了这项工作。根据我想要的特定单词识别句子,然后从这些删除的句子中包含我不想要的单词。


推荐阅读