我试图找到使用括号在文本中指定的完整形式的首字母缩略词。这是一个例子 -
异常DNA甲基化是癌症中主要的表观遗传改变之一,据报道其在结肠直肠癌(CRC)的一个子集中累积,即所谓的CpG岛甲基化表型(CIMP),已知其与微卫星相关降低不稳定性(MSI) - 高CRC
在这里,我希望能够形成一个简短/完整形式的列表,如 -
CRC - 结肠直肠癌CIMP - CpG岛甲基化表型
MSI - 微卫星不稳定性.....
事情是我能够使用re.findall('(\(.*?\))', s)
找到所有带括号的实体,但找到相应的完整形式证明是困难的。假设所有这些完整形式都在括号的左边,我可以使用单词边界来查找括号前的4个单词。但是为了找到正确的完整形式的首字母缩略词,我想使用以下两个条件 -
根据我目前对正则表达式的理解,我无法编写一个解决上述两个条件的正则表达式,并在文本中找到所有这些情况。你能不能给我一些指示?
答案 0 :(得分:1)
正如我之前所说,在某些情况下这可能是不准确的。您可能需要校对结果的准确性。
我建议使用几个正则表达式。以下是您需要采取的步骤:
((?:\w+\W+){1,
(首字母缩写词长度+3)})\(
首字母缩写词\)
。例如,((?:\w+\W+){1,6})\(CRC\)
。\b
(首字母缩写词首字母).*
。例如,\bC.*
表示CRC。您将需要在此处使用不区分大小写的匹配
这会找到以该范围内的给定字母开头的第一个单词;你可以用这种方式在首字母缩略词之前加上额外的词语。请注意,我正在使用“单词”的正则表达式定义,这意味着[a-zA-Z0-9_]
与\w
匹配,(除非您处于Unicode模式,当它与[\p{L}\p{N}_]
匹配时)。如果第一个单词可以在连字符后直接出现,则可能需要更改\w
和\W
(以及\b
。