使用正则表达式查找带括号的缩写词的完整形式

使用正则表达式查找带括号的缩写词的完整形式

我正在尝试查找文本中使用括号指定的首字母缩略词的完整形式。

以下是一个例子:

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

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

CRC-结肠直肠癌

CIMP - CpG 岛甲基化表型

MSI——微型卫星降低不稳定性

问题是我已经能够使用 找到所有带括号的实体re.findall('(\(.*?\))', s),但找到相应的完整形式却很困难。

假设所有这些完整形式都在括号的左边,我想使用以下内容2条件来捕获括号中缩写的完整形式 -

  • 单词数不超过 3+|SF|,其中 |SF| 是缩写形式的字符数(微卫星降低不稳定性 (MSI) - 此处完整形式有 4 个单词,而缩写形式有 3 个字符)
  • 完整形式的第一个单词以缩写形式的第一个字符开头(例如。C大肠癌(Crc))

以我目前对的理解regex,我还无法编写一个regex能够解决上述两个条件并在文本中找到所有此类情况的程序。

您能给我一些指点吗?

答案1

假设你正在使用 Python:

((\w)\w* )(\w* ){0,3}\((?i)(\2)[^)]*\)

这个捕获第 2 组中单词的第一个字符。该单词后面跟着零到三个单词(如果合适,可以增加数量)。所有单词都由文字空格分隔。接下来是一个左括号,后面跟着第 2 组中捕获的字母,不区分大小写。所有这些都跟在括号模式的其余部分后面。

我无法将单词数与首字母缩略词的字符数进行匹配,因此您的一个条件不满足。

我的评论太悲观了。但它会捕捉到很多废话。

在 regex101.com 上测试

顺便说一句,您可以调整括号模式并使用\([^)]*\)。具有贪婪乘数的否定字符不需要反向引用,因此该过程运行得更快。

相关内容