我需要将前一个单词添加到句子-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值。