使用python正则表达式模块将该值替换为前面出现的首字母缩略词



我需要将前一个单词添加到句子-number之前出现的-number。请查看输入字符串和预期输出字符串以获得更多说明。我已经尝试了.replace,.sub方法的正则表达式与静态的方式,这是一种操纵输出。

输入字符串:

痤疮刺激角质形成细胞中白细胞介素(IL)-1、-8、LL-37、MMP-1、-2、-3、-9、-13 mRNA的表达。

期望输出字符串:

痤疮刺激角质形成细胞中白细胞介素(IL)-1、白细胞介素(IL)-8、LL-37、MMP-1、MMP-2、MMP-3、MMP-9、MMP-13 mRNA的表达。

代码:

import re
string_a = "The acnes stimulated the mRNA expression of interleukin (IL)-1, -8, LL-37, MMP-1, -2, -3, -9, and -13 in keratinocytes."
regex1 = re.findall(r"[a-z]+s+(+[A-Z]+)+-d+,s+-d,+", string_a)
regex2 = re.findall(r"[A-Z]+-d+,s+-d,s+-d,s+-d,s+[a-z]+s+-d+", string_a)

可以使用

import re
string_a = "The acnes stimulated the mRNA expression of interleukin (IL)-1, -8, LL-37, MMP-1, -2, -3, -9, and -13 in keratinocytes."
pattern = re.compile(r"b([A-Za-z]+s*([A-Z]+)|[A-Z]+)(s*-d+(?:,s*-d+)*)(?:,s*ands+(-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) )
# => The acnes stimulated the mRNA expression of interleukin (IL)-1, interleukin (IL)-8, LL-37, MMP-1, MMP-2, MMP-3, MMP-9, and MMP-13 in keratinocytes.

查看Python演示和正则表达式演示。

  • b-字边界
  • ([A-Za-z]+s*([A-Z]+)|[A-Z]+)-捕获组1:1个或多个ASCII字母,然后0个或多个空格,(,一个或多个大写ASCII字母,以及)一个或多个大写ASCII字母
  • (s*-d+(?:,s*-d+)*)-捕获组2:零或多个空格,-,一个或多个数字,然后零或多个逗号序列,零个或多个空格,-和一个或多个数字
  • (?:,s*ands+(-d+))?-可选的非捕获组:逗号,零或多个空白,and,一个或多个空白,然后是捕获组3:-,一个或多个数字。

将Group 1值附加到lambda中所有以逗号分隔的Group 2数字前,用作替换参数。

如果匹配到Group 3,则附加and+空格+连接的Group 1和Group 3值。

相关内容

最新更新