Python 正则表达式字符串模式插入操作

Python 正则表达式字符串模式插入操作,python,regex,string,regex-group,re,Python,Regex,String,Regex Group,Re,输入字符串: 蛋白酶激活受体-2-肌间质(IS)-1α、-8、-97、-2α和-3是特异性拮抗剂。角质形成细胞中的LL-37、-15、SAC-1、-7和-21表现良好 输出字符串: 蛋白酶激活受体-2间皮(IS)-1α、间皮(IS)-8、间皮(IS)-97、间皮(IS)-2α和-3是特异性拮抗剂。角质形成细胞中的LL-37、LL-15、SAC-1、SAC-7和SAC-21表现良好 预期输出为: 蛋白酶激活受体-2间皮(IS)-1α、间皮(IS)-8、间皮(IS)-97、间皮(IS)-2α和间皮(

输入字符串:

蛋白酶激活受体-2-肌间质(IS)-1α、-8、-97、-2α和-3是特异性拮抗剂。角质形成细胞中的LL-37、-15、SAC-1、-7和-21表现良好

输出字符串:

蛋白酶激活受体-2间皮(IS)-1α、间皮(IS)-8、间皮(IS)-97、间皮(IS)-2α和-3是特异性拮抗剂。角质形成细胞中的LL-37、LL-15、SAC-1、SAC-7和SAC-21表现良好

预期输出为:

蛋白酶激活受体-2间皮(IS)-1α、间皮(IS)-8、间皮(IS)-97、间皮(IS)-2α和间皮(IS)-3为特异性拮抗剂。角质形成细胞中的LL-37、LL-15、SAC-1、SAC-7和SAC-21表现良好

我的输出字符串中没有interskin(IS)-3部分。请查看我的代码并提出解决方案

重新导入
string_a=“蛋白酶激活受体-2皮肤间(IS)-1α、-8、-97、-2α和-3是特异性拮抗剂。角质形成细胞中的LL-37、-15、SAC-1、-7和-21是良好的。”
打印(字符串a)
模式=重新编译(r“\b([A-z-z]+\s*\([A-z]+\)[A-z]+)(\s*-\d+[A-z]+(?:,*\s*-\d+)*\s*-\d+(?:,*\s*-\d+)(?:,*\s*和\s+(-\d+))
打印(“\n”)
打印(pattern.sub(lambda x:x.group(1)+f',{x.group(1)}).join(map(str.strip,x.group(2.strip().split(','))+(f'和{x.group(1)}{x.group(3)}如果x.group(3)else'',字符串_a))

使用您的模式和代码,您可以在第二个备选方案的组末尾添加匹配的可选大写字符
[A-Z]*

\b([A-Za-z]+\s*\([A-Z]+\)|[A-Z]+)(\s*-\d+[A-Z]+(?:,*\s*-\d+[A-Z]*)*|\s*-\d+(?:,*\s*-\d+)*)(?:,*\s*and\s+(-\d+))?
                                                           ^^^^^^

范例

import re
string_a = "The Proteinase-Activated Receptor-2 interskin (IS)-1ALPHA, -8, -97, -2ALPHA, and -3 was specific antagonist. The LL-37, -15, SAC-1, -7, and -21 in keratinocytes was good."
pattern = re.compile(r"\b([A-Za-z]+\s*\([A-Z]+\)|[A-Z]+)(\s*-\d+[A-Z]+(?:,*\s*-\d+[A-Z]*)*|\s*-\d+(?:,*\s*-\d+)*)(?:,*\s*and\s+(-\d+))?")
print(pattern.sub(lambda x: x.group(1) + f', {x.group(1)}'.join(map(str.strip, x.group(2).strip().split(','))) + (f' and {x.group(1)}{x.group(3)}' if x.group(3) else ''), string_a))
输出

蛋白酶激活受体-2间皮(IS)-1α,间皮 (IS)-8、肌间皮(IS)-97、肌间皮(IS)-2阿尔法和肌间皮(IS)-3 是特异性拮抗剂。LL-37、LL-15、SAC-1、SAC-7和SAC-21 角质形成细胞良好