使用正则表达式查找完整形式的括号中的首字母缩略词(简单)

时间:2016-10-17 13:24:28

标签: regex

我试图找到使用括号在文本中指定的完整形式的首字母缩略词。这是一个例子 -

  

异常DNA甲基化是癌症中主要的表观遗传改变之一,据报道其在结肠直肠癌(CRC)的一个子集中累积,即所谓的CpG岛甲基化表型(CIMP),已知其与微卫星相关降低不稳定性(MSI) - 高CRC

在这里,我希望能够形成一个简短/完整形式的列表,如 -

  CRC - 结肠直肠癌

     

CIMP - CpG岛甲基化表型

     MSI - 微卫星不稳定性.....

事情是我能够使用re.findall('(\(.*?\))', s)找到所有带括号的实体,但找到相应的完整形式证明是困难的。假设所有这些完整形式都在括号的左边,我可以使用单词边界来查找括号前的4个单词。但是为了找到正确的完整形式的首字母缩略词,我想使用以下两个条件 -

  • 字数不超过3+ | SF |哪里| SF |是短形式的字符数(微卫星减少不稳定性(MSI),这里全格有4个字,而短形有3个字)
  • 完整形式的第一个单词以短语的第一个字符开头(例如 c 结直肠癌( c rc))

根据我目前对正则表达式的理解,我无法编写一个解决上述两个条件的正则表达式,并在文本中找到所有这些情况。你能不能给我一些指示?

1 个答案:

答案 0 :(得分:1)

正如我之前所说,在某些情况下这可能是不准确的。您可能需要校对结果的准确性。

我建议使用几个正则表达式。以下是您需要采取的步骤:

  1. 获取首字母缩略词。您已经使用第一个正则表达式执行此操作。
  2. 查找首字母缩略词中的字母数。
  3. 构造并运行此正则表达式:((?:\w+\W+){1,(首字母缩写词长度+3)})\(首字母缩写词\)。例如,((?:\w+\W+){1,6})\(CRC\)
    此步骤获取括号内首字母缩略词的范围内的所有单词(“不超过3+ | SF |”)。
  4. 构造并运行此正则表达式,用于上一步中组1中的单词:\b(首字母缩写词首字母).*。例如,\bC.*表示CRC。您将需要在此处使用不区分大小写的匹配 这会找到以该范围内的给定字母开头的第一个单词;你可以用这种方式在首字母缩略词之前加上额外的词语。
  5. 请注意,我正在使用“单词”的正则表达式定义,这意味着[a-zA-Z0-9_]\w匹配,(除非您处于Unicode模式,当它与[\p{L}\p{N}_]匹配时)。如果第一个单词可以在连字符后直接出现,则可能需要更改\w\W(以及\b