我想转换字符串:
CPP
至C<sup>++</sup>
CP
至C<sup>+</sup>
C
至C
。 目前我使用两个正则表达式执行此操作:
mystring = "CPP"
a = re.sub(r"P", "+", mystring)
b = re.sub(r"(\++)", r"<sup>\1</sup>", a)
print b # C<sup>++</sup>
这有效;但我想用一个正则表达式来做这件事。这可能吗?
答案 0 :(得分:2)
通过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
答案 1 :(得分:2)
这是一个类似的解决方案:
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)
请参阅IDEONE demo
正则表达式(?<=\bC)P+\b
匹配以C
开头并以任意数量的P
结尾的单词。 "+" * len(m.group(0))
允许使用P
s替换任意数量的+
。