Python 使用一个正则表达式替换字符并将其包装在标记中

Python 使用一个正则表达式替换字符并将其包装在标记中,python,regex,Python,Regex,我要转换字符串: CPP到C++ CP至C+ C至C 目前,我使用两个正则表达式执行此操作: mystring = "CPP" a = re.sub(r"P", "+", mystring) b = re.sub(r"(\++)", r"<sup>\1</sup>", a) print b # C<sup>++</sup> mystring=“CPP” a=re.sub(r“P”,“+”,mystring) b=re.sub(r“(\++

我要转换字符串:

  • CPP
    C++
  • CP
    C+
  • C
    C
目前,我使用两个正则表达式执行此操作:

mystring = "CPP"

a = re.sub(r"P", "+", mystring)
b = re.sub(r"(\++)", r"<sup>\1</sup>", a)

print b # C<sup>++</sup>
mystring=“CPP”
a=re.sub(r“P”,“+”,mystring)
b=re.sub(r“(\++)”,r“\1”,a)
打印B+C++

这是有效的;但是我想用一个正则表达式来实现这一点。这可能吗?

可以通过更换零件中的匿名功能通过
re.sub
实现

>>> def change(s):
    return re.sub(r'\b(C)(P{1,2})\b', lambda m: m.group(1) + ('<sup>++</sup>' if len(m.group(2)) == 2 else  '<sup>+</sup>'), s)

>>> print(change('CPP'))
C<sup>++</sup>
>>> print(change('CP'))
C<sup>+</sup>
>>> print(change('CP'))
C<sup>+</sup>
>>> print(change('C'))
C
def更改: 返回re.sub(r'\b(C)(P{1,2})\b',lambda m:m.group(1)+('++'如果len(m.group(2))==2 else'+',s) >>>打印(更改(“CPP”) C++ >>>打印(更改('CP')) C+ >>>打印(更改('CP')) C+ >>>打印(更改('C')) C
这里有一个类似的解决方案:

import re
s = "CPP" # to C<sup>++</sup>
rx = r"(?<=\bC)P+\b"
res = re.sub(rx, (lambda m: "<sup>%s</sup>"%("+" * len(m.group(0)))), s)
print(res)
重新导入
S=C++的“CPP”

rx=r“(?可以说,这可能不是一个更好的解决方案。仅仅因为它是一行,并不意味着它更好。好吧,写一个比这个更好的解决方案。我是说,在一行中完成它可能不是一个更好的解决方案