![使用正则表达式查找带括号的缩写词的完整形式](https://linux22.com/image/1510156/%E4%BD%BF%E7%94%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%9F%A5%E6%89%BE%E5%B8%A6%E6%8B%AC%E5%8F%B7%E7%9A%84%E7%BC%A9%E5%86%99%E8%AF%8D%E7%9A%84%E5%AE%8C%E6%95%B4%E5%BD%A2%E5%BC%8F.png)
我正在尝试查找文本中使用括号指定的首字母缩略词的完整形式。
以下是一个例子:
据报道,异常 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 上测试
顺便说一句,您可以调整括号模式并使用\([^)]*\)
。具有贪婪乘数的否定字符不需要反向引用,因此该过程运行得更快。